--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / components / call / CallPage.vue
Displaying Raw • Download
meshchatx/src/frontend/components/call/CallPage.vue e6762ec2b7fc6afe61e49eac5560cb349748a925 (e6762ec2) Text, 241.13 KB
T8b949e<!-- SPDX-License-Identifier: 0BSD -->
Tb4b4b4<Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col w-full h-full bg-gray-100 dark:bg-zinc-950"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"w-full h-full overflow-y-auto"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"mx-auto w-full max-w-4xl p-4 md:p-6 flex-1 flex flex-col min-h-full"Tb4b4b4>
T8b949e<!-- Tabs -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-wrap justify-center border-b border-gray-200 dark:border-zinc-800 shrink-0"Tb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3activeTab Tff7b72=== Ta5d6ff'phone'
Tff7b72? Ta5d6ff'border-blue-500 text-blue-600 dark:text-blue-400'
Tff7b72: Ta5d6ff'border-transparent text-gray-500 hover:text-gray-700 dark:text-zinc-400 dark:hover:text-zinc-200 hover:border-gray-300'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"py-2 px-4 border-b-2 font-medium text-sm transition-all"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72= Ta5d6ff'phone'Ta5d6ff"
Tb4b4b4>
Phone
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3activeTab Tff7b72=== Ta5d6ff'phonebook'
Tff7b72? Ta5d6ff'border-blue-500 text-blue-600 dark:text-blue-400'
Tff7b72: Ta5d6ff'border-transparent text-gray-500 hover:text-gray-700 dark:text-zinc-400 dark:hover:text-zinc-200 hover:border-gray-300'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"py-2 px-4 border-b-2 font-medium text-sm transition-all"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72= Ta5d6ff'phonebook'Ta5d6ff"
Tb4b4b4>
Phonebook
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3activeTab Tff7b72=== Ta5d6ff'voicemail'
Tff7b72? Ta5d6ff'border-blue-500 text-blue-600 dark:text-blue-400'
Tff7b72: Ta5d6ff'border-transparent text-gray-500 hover:text-gray-700 dark:text-zinc-400 dark:hover:text-zinc-200 hover:border-gray-300'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"py-2 px-4 border-b-2 font-medium text-sm flex items-center gap-2 transition-all"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72= Ta5d6ff'voicemail'Ta5d6ff"
Tb4b4b4>
Voicemail
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3unreadVoicemailsCount Tff7b72> T79c0ff0Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"bg-red-500 text-white text-[10px] px-1.5 py-0.5 rounded-full animate-pulse"
Tb4b4b4>Tff7b72{{ Te6edf3unreadVoicemailsCount Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3activeTab Tff7b72=== Ta5d6ff'contacts'
Tff7b72? Ta5d6ff'border-blue-500 text-blue-600 dark:text-blue-400'
Tff7b72: Ta5d6ff'border-transparent text-gray-500 hover:text-gray-700 dark:text-zinc-400 dark:hover:text-zinc-200 hover:border-gray-300'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"py-2 px-4 border-b-2 font-medium text-sm transition-all"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72= Ta5d6ff'contacts'Ta5d6ff"
Tb4b4b4>
Contacts
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3activeTab Tff7b72=== Ta5d6ff'ringtone'
Tff7b72? Ta5d6ff'border-blue-500 text-blue-600 dark:text-blue-400'
Tff7b72: Ta5d6ff'border-transparent text-gray-500 hover:text-gray-700 dark:text-zinc-400 dark:hover:text-zinc-200 hover:border-gray-300'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"py-2 px-4 border-b-2 font-medium text-sm transition-all"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72= Ta5d6ff'ringtone'Ta5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.ringtone"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
T8b949e<!-- <button
:class="[
activeTab === 'recordings'
? 'border-blue-500 text-blue-600 dark:text-blue-400'
: 'border-transparent text-gray-500 hover:text-gray-700 dark:text-zinc-400 dark:hover:text-zinc-200 hover:border-gray-300',
]"
class="py-2 px-4 border-b-2 font-medium text-sm transition-all"
@click="activeTab = 'recordings'"
>
{{ $t("call.recordings") }}
</button> -->
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Phone Tab -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72=== Ta5d6ff'phone'Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex-1 flex flex-col pt-2"Tb4b4b4>
T8b949e<!-- LXST Disabled State -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3config Tff7b72&& Tff7b72!Te6edf3configTb4b4b4.Te6edf3telephone_enabledTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"flex-1 flex flex-col items-center justify-center py-12 px-4"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"w-full max-w-md bg-white dark:bg-zinc-900 border border-gray-200 dark:border-zinc-800 rounded-2xl p-8 flex flex-col items-center text-center shadow-xl"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"size-16 bg-red-100 dark:bg-red-900/30 rounded-full flex items-center justify-center mb-4"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"phone-off"
Te6edf3classTff7b72=Ta5d6ff"size-8 text-red-600 dark:text-red-400"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72h2 Te6edf3classTff7b72=Ta5d6ff"text-xl font-bold text-gray-900 dark:text-white mb-2"Tb4b4b4>LXST is disabledTb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-500 dark:text-zinc-400 mb-6"Tb4b4b4>
Telephony is currently disabled. Enable it to make and receive calls.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-center gap-2 rounded-2xl bg-blue-600 py-3 px-6 text-sm font-bold text-white shadow-lg shadow-blue-600/20 hover:bg-blue-500 transition-all duration-200"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3updateConfigTb4b4b4(Tb4b4b4{ Te6edf3telephone_enabledTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"phone" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Enable LXST
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72template Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3configTff7b72?Tb4b4b4.Te6edf3telephone_enabledTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72|| Te6edf3isCallEnded Tff7b72|| Te6edf3initiationStatusTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"flex-1 flex flex-col items-center justify-center py-12 px-4"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"w-full max-w-md border-b border-gray-200 dark:border-zinc-800 p-8! flex flex-col items-center text-center relative overflow-hidden"
Tb4b4b4>
T8b949e<!-- Recording indicator -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3is_recordingTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"absolute top-4 right-4 z-20 flex items-center gap-1.5 px-2 py-1 bg-red-500/10 rounded-full border border-red-500/20"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"size-2 bg-red-500 rounded-full animate-pulse"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-bold text-red-500 uppercase tracking-wider"
Tb4b4b4>RecordingTb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative mb-8"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"size-32 mx-auto bg-gray-100 dark:bg-zinc-800 rounded-full flex items-center justify-center border-4 border-white dark:border-zinc-900 shadow-2xl relative z-10"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4{
Ta5d6ff'ring-4 ring-blue-500/20 animate-pulse'Tff7b72:
Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff4Tb4b4b4,
Tb4b4b4}Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72LxmfUserIcon
Tb4b4b4:Te6edf3custom-imageTff7b72=Ta5d6ff"Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3custom_imageTa5d6ff"
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"
Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3remote_icon
Tff7b72? Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3icon_name
Tff7b72: Ta5d6ff''
Ta5d6ff"
Tb4b4b4:Te6edf3icon-foreground-colourTff7b72=Ta5d6ff"
Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3remote_icon
Tff7b72? Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3foreground_colour
Tff7b72: Ta5d6ff''
Ta5d6ff"
Tb4b4b4:Te6edf3icon-background-colourTff7b72=Ta5d6ff"
Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3remote_icon
Tff7b72? Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3background_colour
Tff7b72: Ta5d6ff''
Ta5d6ff"
Te6edf3icon-classTff7b72=Ta5d6ff"size-28"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff6Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"absolute -bottom-2 -right-2 bg-green-500 text-white p-2 rounded-full shadow-lg border-4 border-white dark:border-zinc-900 z-20"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"phone-in-talk" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative z-10 space-y-1 mb-8 flex flex-col items-center text-center"Tb4b4b4>
Tb4b4b4<Tff7b72h2 Te6edf3classTff7b72=Ta5d6ff"text-2xl font-bold text-gray-900 dark:text-white truncate max-w-[280px]"Tb4b4b4>
Tff7b72{{
Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3remote_identity_name Tff7b72||
Te6edf3initiationTargetName Tff7b72||
Te6edf3$tTb4b4b4(Ta5d6ff"call.unknown"Tb4b4b4)
Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3remote_identity_hash Tff7b72|| Te6edf3initiationTargetHashTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-xs font-mono text-gray-400 dark:text-zinc-500 tracking-wider"
Tb4b4b4>
Tff7b72{{
Te6edf3formatDestinationHashTb4b4b4(
Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3remote_identity_hash Tff7b72|| Te6edf3initiationTargetHash
Tb4b4b4)
Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCallTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"mt-1 flex items-center justify-center gap-2 text-[11px] text-gray-500 dark:text-zinc-400"
Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCallTb4b4b4.Te6edf3path_hops Tff7b72!= Tff7b72nullTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"inline-flex items-center gap-1 rounded-full bg-gray-100 dark:bg-zinc-800 px-2 py-0.5"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"sitemap-outline" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3activeCallTb4b4b4.Te6edf3path_hops Tff7b72}} hops
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCallTb4b4b4.Te6edf3path_interfaceTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"inline-flex items-center gap-1 rounded-full bg-gray-100 dark:bg-zinc-800 px-2 py-0.5 max-w-[16rem]"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"access-point-network" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"truncate"Tb4b4b4>Tff7b72{{ Te6edf3activeCallTb4b4b4.Te6edf3path_interface Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Tb4b4b4(Te6edf3activeCall Tff7b72|| Te6edf3lastCallTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3is_contact Tff7b72|| Tff7b72!Tff7b72!Te6edf3initiationTargetNameTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"inline-flex items-center gap-1 px-2 py-0.5 bg-blue-50 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400 text-[10px] font-bold rounded-full uppercase tracking-wider"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"check-decagram" Te6edf3classTff7b72=Ta5d6ff"size-3" Tb4b4b4/Tb4b4b4>
Contact
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- call status -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative z-10 mb-8"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"px-4 py-2 bg-gray-50 dark:bg-zinc-800/50 rounded-2xl inline-block border border-gray-100 dark:border-zinc-800"
Tb4b4b4>
Tb4b4b4<Tff7b72template Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3wasDeclinedTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-red-500 font-bold text-sm"Tb4b4b4>Tff7b72{{
Te6edf3$tTb4b4b4(Ta5d6ff"call.call_declined"Tb4b4b4)
Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72template Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3isCallEndedTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-gray-500 dark:text-zinc-400 font-bold text-sm"Tb4b4b4>Tff7b72{{
Te6edf3$tTb4b4b4(Ta5d6ff"call.call_ended"Tb4b4b4)
Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72template Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3activeCallTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col items-center"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCallTb4b4b4.Te6edf3is_voicemailTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-red-500 font-bold text-sm animate-pulse flex items-center gap-2"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"record" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.recording_voicemail"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-else-ifTff7b72=Ta5d6ff"
Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3is_incoming Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff4
Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-blue-600 dark:text-blue-400 font-bold text-sm"
Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.incoming_call"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-else
Te6edf3classTff7b72=Ta5d6ff"text-gray-700 dark:text-zinc-300 font-bold text-sm flex items-center gap-2"
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff0Ta5d6ff"Tb4b4b4>Busy...Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff1Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-red-500"
Tb4b4b4>RejectedTb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff2Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"animate-pulse"
Tb4b4b4>Calling...Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff3Ta5d6ff"
Tb4b4b4>AvailableTb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff4Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"animate-pulse"
Tb4b4b4>Ringing...Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff5Ta5d6ff"Tb4b4b4>Tff7b72{{
Te6edf3$tTb4b4b4(Ta5d6ff"call.establishing_link"Tb4b4b4)
Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff6Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-green-500 flex items-center gap-2"
Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"size-2 bg-green-500 rounded-full animate-ping"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Connected
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3activeCallTa5d6ff"Tb4b4b4>Status: Tff7b72{{ Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
T8b949e<!-- Duration -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff6 Tff7b72&& Te6edf3elapsedTimeTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-xs font-mono text-gray-400 dark:text-zinc-500 mt-1"
Tb4b4b4>
Tff7b72{{ Te6edf3elapsedTime Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff6Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"mt-3 grid grid-cols-2 gap-2 text-xs w-full max-w-xs"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"rounded-xl bg-gray-50 dark:bg-zinc-800/70 border border-gray-100 dark:border-zinc-700/70 px-2 py-1.5 text-left"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-400"Tb4b4b4>
TX Pkts
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-semibold text-gray-800 dark:text-zinc-100"Tb4b4b4>
Tff7b72{{ Te6edf3formatNumberTb4b4b4(Te6edf3activeCallTb4b4b4.Te6edf3tx_packetsTb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"rounded-xl bg-gray-50 dark:bg-zinc-800/70 border border-gray-100 dark:border-zinc-700/70 px-2 py-1.5 text-left"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-400"Tb4b4b4>
RX Pkts
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-semibold text-gray-800 dark:text-zinc-100"Tb4b4b4>
Tff7b72{{ Te6edf3formatNumberTb4b4b4(Te6edf3activeCallTb4b4b4.Te6edf3rx_packetsTb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"rounded-xl bg-gray-50 dark:bg-zinc-800/70 border border-gray-100 dark:border-zinc-700/70 px-2 py-1.5 text-left"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-400"Tb4b4b4>
TX Data Out
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-semibold text-gray-800 dark:text-zinc-100"Tb4b4b4>
Tff7b72{{ Te6edf3formatBytesTb4b4b4(Te6edf3activeCallTb4b4b4.Te6edf3tx_bytesTb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"rounded-xl bg-gray-50 dark:bg-zinc-800/70 border border-gray-100 dark:border-zinc-700/70 px-2 py-1.5 text-left"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-400"Tb4b4b4>
RX Data In
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-semibold text-gray-800 dark:text-zinc-100"Tb4b4b4>
Tff7b72{{ Te6edf3formatBytesTb4b4b4(Te6edf3activeCallTb4b4b4.Te6edf3rx_bytesTb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72template Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3initiationStatusTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col items-center"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-blue-600 dark:text-blue-400 font-bold text-sm animate-pulse"
Tb4b4b4>
Tff7b72{{ Te6edf3initiationStatus Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isCallEnded Tff7b72&& Te6edf3callDurationTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-xs font-mono text-gray-400 dark:text-zinc-500 mt-2"
Tb4b4b4>
Duration: Tff7b72{{ Te6edf3callDuration Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Play Voicemail Button -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isCallEnded Tff7b72&& Te6edf3wasVoicemailTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"mt-6 animate-fade-in"Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"px-6 py-3 rounded-full bg-blue-500 hover:bg-blue-600 text-white font-bold flex items-center gap-2 shadow-lg shadow-blue-500/30 transition-all hover:scale-105"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3playLatestVoicemailTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3playingVoicemailId Tff7b72? Ta5d6ff'stop' Tff7b72: Ta5d6ff'play'Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-6"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72spanTb4b4b4>Tff7b72{{ Te6edf3playingVoicemailId Tff7b72? Ta5d6ff"Stop" Tff7b72: Ta5d6ff"Play Voicemail" Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- settings during connected call -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff6Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"w-full relative z-10 mb-8"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col gap-4"Tb4b4b4>
Tb4b4b4<Tff7b72select
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3selectedAudioProfileIdTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"input-field rounded-xl! py-2! shadow-xs"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"Te6edf3switchAudioProfileTb4b4b4(Te6edf3selectedAudioProfileIdTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72option
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3audioProfile Tff7b72in Te6edf3audioProfilesTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3audioProfileTb4b4b4.Te6edf3idTa5d6ff"
Tb4b4b4:Te6edf3valueTff7b72=Ta5d6ff"Te6edf3audioProfileTb4b4b4.Te6edf3idTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3audioProfileTb4b4b4.Te6edf3name Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72selectTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex justify-center gap-4"Tb4b4b4>
T8b949e<!-- mute/unmute mic -->
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3isMicMuted
Tff7b72? Ta5d6ff'bg-red-500 text-white shadow-red-500/20'
Tff7b72: Ta5d6ff'bg-gray-100 dark:bg-zinc-800 text-gray-700 dark:text-zinc-200 hover:bg-gray-200 dark:hover:bg-zinc-700 shadow-gray-200/20 dark:shadow-black/20'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-4 rounded-full shadow-lg transition-all duration-200"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3toggleMicrophoneTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3isMicMuted Tff7b72? Ta5d6ff'microphone-off' Tff7b72: Ta5d6ff'microphone'Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-6"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
T8b949e<!-- mute/unmute speaker -->
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3isSpeakerMuted
Tff7b72? Ta5d6ff'bg-red-500 text-white shadow-red-500/20'
Tff7b72: Ta5d6ff'bg-gray-100 dark:bg-zinc-800 text-gray-700 dark:text-zinc-200 hover:bg-gray-200 dark:hover:bg-zinc-700 shadow-gray-200/20 dark:shadow-black/20'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-4 rounded-full shadow-lg transition-all duration-200"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3toggleSpeakerTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3isSpeakerMuted Tff7b72? Ta5d6ff'volume-off' Tff7b72: Ta5d6ff'volume-high'Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-6"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- actions -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCallTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"w-full relative z-10 flex flex-col gap-3"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex gap-3"Tb4b4b4>
T8b949e<!-- answer call -->
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3is_incoming Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff4Ta5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"flex-1 flex items-center justify-center gap-2 rounded-2xl bg-green-600 py-4 text-sm font-bold text-white shadow-xl shadow-green-600/20 hover:bg-green-500 transition-all duration-200"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3answerCallTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"phone" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72spanTb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.accept"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
T8b949e<!-- send to voicemail -->
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3is_incoming Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff4Ta5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"flex-1 flex items-center justify-center gap-2 rounded-2xl bg-blue-600 py-4 text-sm font-bold text-white shadow-xl shadow-blue-600/20 hover:bg-blue-500 transition-all duration-200"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3sendToVoicemailTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"voicemail" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72spanTb4b4b4>VoicemailTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- hangup/decline call -->
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"w-full flex items-center justify-center gap-2 rounded-2xl bg-red-600 py-4 text-sm font-bold text-white shadow-xl shadow-red-600/20 hover:bg-red-500 transition-all duration-200"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3hangupCallTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"phone-hangup" Te6edf3classTff7b72=Ta5d6ff"size-5 rotate-135" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72spanTb4b4b4>Tff7b72{{
Te6edf3activeCall Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3is_incoming Tff7b72&& Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff4
Tff7b72? Te6edf3$tTb4b4b4(Ta5d6ff"call.decline"Tb4b4b4)
Tff7b72: Te6edf3$tTb4b4b4(Ta5d6ff"call.hangup"Tb4b4b4)
Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"space-y-6 my-6 max-w-3xl mx-auto w-full"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"w-full border-b border-gray-200 dark:border-zinc-800 py-2"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-3 mb-6"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"bg-blue-100 dark:bg-blue-900/30 p-2.5 rounded-2xl"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"phone-plus"
Te6edf3classTff7b72=Ta5d6ff"size-6 text-blue-600 dark:text-blue-400"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72h2 Te6edf3classTff7b72=Ta5d6ff"text-lg font-bold text-gray-900 dark:text-white leading-tight"Tb4b4b4>
New Call
Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-zinc-400"Tb4b4b4>
Enter an identity to call.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative flex-1"Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3destinationHashTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3placeholderTff7b72=Ta5d6ff"Identity Hash or Name"
Te6edf3classTff7b72=Ta5d6ff"input-field"
Tb4b4b4@Te6edf3keydownTb4b4b4.Te6edf3enterTb4b4b4.Te6edf3preventTff7b72=Ta5d6ff"Te6edf3handleCallInputEnterTa5d6ff"
Tb4b4b4@Te6edf3keydownTb4b4b4.Te6edf3upTb4b4b4.Te6edf3preventTff7b72=Ta5d6ff"Te6edf3handleCallInputUpTa5d6ff"
Tb4b4b4@Te6edf3keydownTb4b4b4.Te6edf3downTb4b4b4.Te6edf3preventTff7b72=Ta5d6ff"Te6edf3handleCallInputDownTa5d6ff"
Tb4b4b4@Te6edf3focusTff7b72=Ta5d6ff"Te6edf3isCallInputFocused Tff7b72= Tff7b72trueTa5d6ff"
Tb4b4b4@Te6edf3blurTff7b72=Ta5d6ff"Te6edf3onCallInputBlurTa5d6ff"
Tb4b4b4/Tb4b4b4>
T8b949e<!-- Suggestions Dropdown -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isCallInputFocused Tff7b72&& Te6edf3newCallSuggestionsTb4b4b4.Te6edf3length Tff7b72> T79c0ff0Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"absolute z-50 left-0 right-0 mt-1 bg-white dark:bg-zinc-900 border border-gray-200 dark:border-zinc-800 rounded-xl shadow-xl overflow-hidden animate-in fade-in slide-in-from-top-2 duration-200"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-forTff7b72=Ta5d6ff"Tb4b4b4(Te6edf3suggestionTb4b4b4, Te6edf3indexTb4b4b4) Tff7b72in Te6edf3newCallSuggestionsTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3suggestionTb4b4b4.Te6edf3hashTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"px-4 py-2.5 flex items-center gap-3 cursor-pointer transition-colors"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3index Tff7b72=== Te6edf3selectedSuggestionIndex
Tff7b72? Ta5d6ff'bg-blue-50 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400'
Tff7b72: Ta5d6ff'hover:bg-gray-50 dark:hover:bg-zinc-800/50 text-gray-700 dark:text-zinc-300'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Tb4b4b4@Te6edf3mousedownTb4b4b4.Te6edf3preventTff7b72=Ta5d6ff"Te6edf3selectSuggestionTb4b4b4(Te6edf3suggestionTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"shrink-0 size-8 rounded-full flex items-center justify-center text-xs"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"
Te6edf3suggestionTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff'contact'
Tff7b72? Ta5d6ff'bg-blue-100 dark:bg-blue-900/40 text-blue-600'
Tff7b72: Ta5d6ff'bg-gray-100 dark:bg-zinc-800 text-gray-500'
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3suggestionTb4b4b4.Te6edf3iconTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-4"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm font-bold truncate"Tb4b4b4>
Tff7b72{{ Te6edf3suggestionTb4b4b4.Te6edf3name Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-mono opacity-50 truncate hover:text-blue-500 transition-colors cursor-copy"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3suggestionTb4b4b4.Te6edf3hashTa5d6ff"
Tb4b4b4@Te6edf3mousedownTb4b4b4.Te6edf3stopTff7b72=Ta5d6ff"Te6edf3copyHashTb4b4b4(Te6edf3suggestionTb4b4b4.Te6edf3hashTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3formatDestinationHashTb4b4b4(Te6edf3suggestionTb4b4b4.Te6edf3hashTb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3suggestionTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff'contact'Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] uppercase font-bold tracking-widest opacity-30"
Tb4b4b4>
Contact
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"bg-blue-600 hover:bg-blue-500 text-white px-6 rounded-2xl font-bold shadow-lg shadow-blue-500/20 transition-all flex items-center gap-2"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3callTb4b4b4(Te6edf3destinationHashTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"phone" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Call
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"pt-2 flex flex-col items-stretch gap-4 lg:flex-row lg:items-start lg:justify-between"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex min-w-0 flex-1 flex-col gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3configTff7b72?Tb4b4b4.Te6edf3telephone_enabledTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex flex-col gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72Toggle
Te6edf3idTff7b72=Ta5d6ff"dnd-toggle"
Tb4b4b4:Te6edf3model-valueTff7b72=Ta5d6ff"Te6edf3configTff7b72?Tb4b4b4.Te6edf3do_not_disturb_enabledTa5d6ff"
Tb4b4b4:Te6edf3labelTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'call.do_not_disturb'Tb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3updateTb4b4b4:Te6edf3model-valueTff7b72=Ta5d6ff"Te6edf3toggleDoNotDisturbTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72Toggle
Te6edf3idTff7b72=Ta5d6ff"contacts-only-toggle"
Tb4b4b4:Te6edf3model-valueTff7b72=Ta5d6ff"Te6edf3configTff7b72?Tb4b4b4.Te6edf3telephone_allow_calls_from_contacts_onlyTa5d6ff"
Tb4b4b4:Te6edf3labelTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'call.allow_calls_from_contacts_only'Tb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3updateTb4b4b4:Te6edf3model-valueTff7b72=Ta5d6ff"Te6edf3toggleAllowCallsFromContactsOnlyTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72Toggle
Te6edf3idTff7b72=Ta5d6ff"telephone-announce-toggle"
Tb4b4b4:Te6edf3model-valueTff7b72=Ta5d6ff"Te6edf3configTff7b72?Tb4b4b4.Te6edf3telephone_announce_enabledTa5d6ff"
Te6edf3labelTff7b72=Ta5d6ff"Announce Telephone Presence (LXST)"
Tb4b4b4@Te6edf3updateTb4b4b4:Te6edf3model-valueTff7b72=Ta5d6ff"Te6edf3toggleTelephoneAnnounceEnabledTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col gap-1"Tb4b4b4>
Tb4b4b4<Tff7b72Toggle
Te6edf3idTff7b72=Ta5d6ff"web-audio-toggle"
Tb4b4b4:Te6edf3model-valueTff7b72=Ta5d6ff"Te6edf3configTff7b72?Tb4b4b4.Te6edf3telephone_web_audio_enabledTa5d6ff"
Te6edf3labelTff7b72=Ta5d6ff"Web Audio Bridge"
Tb4b4b4@Te6edf3updateTb4b4b4:Te6edf3model-valueTff7b72=Ta5d6ff"Te6edf3onToggleWebAudioTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-zinc-400 px-1"Tb4b4b4>
Web audio bridge allows web/electron to hook into LXST backend
for passing microphone and audio streams to active telephone
calls.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex w-full shrink-0 flex-col gap-2 lg:w-auto"Tb4b4b4>
T8b949e<!-- <Toggle
id="call-recording-toggle"
:model-value="config?.call_recording_enabled"
:label="$t('call.call_recording')"
@update:model-value="toggleCallRecording"
/> -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col gap-1"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-bold text-gray-500 uppercase tracking-widest px-1"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.default_quality"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72select
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3configTa5d6ff"
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3telephone_audio_profile_idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"input-field min-w-0 rounded-lg! border-gray-200! py-1! px-2! text-xs! dark:border-zinc-800! lg:min-w-[120px]"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"
Te6edf3updateConfigTb4b4b4(Tb4b4b4{
Te6edf3telephone_audio_profile_idTff7b72:
Te6edf3configTb4b4b4.Te6edf3telephone_audio_profile_idTb4b4b4,
Tb4b4b4}Tb4b4b4)
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72option
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3audioProfile Tff7b72in Te6edf3audioProfilesTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3audioProfileTb4b4b4.Te6edf3idTa5d6ff"
Tb4b4b4:Te6edf3valueTff7b72=Ta5d6ff"Te6edf3audioProfileTb4b4b4.Te6edf3idTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3audioProfileTb4b4b4.Te6edf3name Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72selectTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Web Audio Device Selection -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3configTff7b72?Tb4b4b4.Te6edf3telephone_web_audio_enabledTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"flex flex-col gap-2 mt-2"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col gap-1"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-bold text-gray-500 uppercase tracking-widest px-1"
Tb4b4b4>
Microphone
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72select
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3selectedAudioInputIdTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"input-field py-1! px-2! text-[10px]! rounded-lg! border-gray-200! dark:border-zinc-800! min-w-[120px]"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"
Te6edf3stopWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3startWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72option
Te6edf3v-forTff7b72=Ta5d6ff"Tb4b4b4(Te6edf3dTb4b4b4, Te6edf3idxTb4b4b4) Tff7b72in Te6edf3audioInputDevicesTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3dTb4b4b4.Te6edf3deviceId Tff7b72|| Ta5d6ff`Ta5d6ffin-Tffd700${Te6edf3idxTffd700}Ta5d6ff`Ta5d6ff"
Tb4b4b4:Te6edf3valueTff7b72=Ta5d6ff"Te6edf3dTb4b4b4.Te6edf3deviceIdTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3dTb4b4b4.Te6edf3label Tff7b72|| Ta5d6ff"Microphone" Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72selectTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col gap-1"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-bold text-gray-500 uppercase tracking-widest px-1"
Tb4b4b4>
Speaker
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72select
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3selectedAudioOutputIdTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"input-field py-1! px-2! text-[10px]! rounded-lg! border-gray-200! dark:border-zinc-800! min-w-[120px]"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"
Te6edf3stopWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3startWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72option
Te6edf3v-forTff7b72=Ta5d6ff"Tb4b4b4(Te6edf3dTb4b4b4, Te6edf3idxTb4b4b4) Tff7b72in Te6edf3audioOutputDevicesTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3dTb4b4b4.Te6edf3deviceId Tff7b72|| Ta5d6ff`Ta5d6ffout-Tffd700${Te6edf3idxTffd700}Ta5d6ff`Ta5d6ff"
Tb4b4b4:Te6edf3valueTff7b72=Ta5d6ff"Te6edf3dTb4b4b4.Te6edf3deviceIdTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3dTb4b4b4.Te6edf3label Tff7b72|| Ta5d6ff"Speaker" Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72selectTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"text-[10px] bg-gray-100 text-gray-600 dark:bg-zinc-800 dark:text-zinc-400 py-1 rounded-lg font-bold uppercase tracking-wider hover:bg-gray-200 dark:hover:bg-zinc-700 transition-colors"
Te6edf3typeTff7b72=Ta5d6ff"button"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3requestAudioPermissionTa5d6ff"
Tb4b4b4>
Refresh Devices
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Call History -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3callHistoryTb4b4b4.Te6edf3length Tff7b72> T79c0ff0 Tff7b72&& Tff7b72!Te6edf3activeCall Tff7b72&& Tff7b72!Te6edf3isCallEndedTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"space-y-4 max-w-3xl mx-auto w-full"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"w-full border-b border-gray-200 dark:border-zinc-800 p-0! overflow-hidden"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"px-5 py-4 border-b border-gray-100 dark:border-zinc-800 flex flex-col gap-4 bg-transparent"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex justify-between items-center"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"p-1.5 bg-gray-200/50 dark:bg-zinc-800 rounded-lg"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"history"
Te6edf3classTff7b72=Ta5d6ff"size-4 text-gray-600 dark:text-zinc-400"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72h3
Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-widest"
Tb4b4b4>
Call History
Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-400 hover:text-red-500 font-bold uppercase tracking-wider transition-colors bg-white dark:bg-zinc-900 px-2 py-1 rounded-md border border-gray-200 dark:border-zinc-800"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3clearHistoryTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"app.clear_history"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative"Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3callHistorySearchTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Tb4b4b4:Te6edf3placeholderTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'call.search_history'Tb4b4b4)Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"input-field py-2! pl-10!"
Tb4b4b4@Te6edf3inputTff7b72=Ta5d6ff"Te6edf3onCallHistorySearchInputTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"magnify"
Te6edf3classTff7b72=Ta5d6ff"absolute left-3.5 top-1/2 -translate-y-1/2 size-4 text-gray-400"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"divide-y divide-gray-100 dark:divide-zinc-800"Tb4b4b4>
Tb4b4b4<Tff7b72li
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3entry Tff7b72in Te6edf3callHistoryTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3entryTb4b4b4.Te6edf3idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"px-5 py-4 hover:bg-blue-50/30 dark:hover:bg-blue-900/10 transition-colors group"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center space-x-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative shrink-0"Tb4b4b4>
Tb4b4b4<Tff7b72LxmfUserIcon
Tb4b4b4:Te6edf3custom-imageTff7b72=Ta5d6ff"
Te6edf3entryTb4b4b4.Te6edf3contact_image Tff7b72||
Te6edf3getContactByHashTb4b4b4(Te6edf3entryTb4b4b4.Te6edf3remote_identity_hashTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3custom_image
Ta5d6ff"
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3entryTb4b4b4.Te6edf3remote_icon Tff7b72? Te6edf3entryTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3icon_name Tff7b72: Ta5d6ff''Ta5d6ff"
Tb4b4b4:Te6edf3icon-foreground-colourTff7b72=Ta5d6ff"
Te6edf3entryTb4b4b4.Te6edf3remote_icon Tff7b72? Te6edf3entryTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3foreground_colour Tff7b72: Ta5d6ff''
Ta5d6ff"
Tb4b4b4:Te6edf3icon-background-colourTff7b72=Ta5d6ff"
Te6edf3entryTb4b4b4.Te6edf3remote_icon Tff7b72? Te6edf3entryTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3background_colour Tff7b72: Ta5d6ff''
Ta5d6ff"
Te6edf3icon-classTff7b72=Ta5d6ff"size-10"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"absolute -bottom-1 -right-1 bg-white dark:bg-zinc-900 rounded-full p-0.5 shadow-xs border border-gray-100 dark:border-zinc-800 shrink-0 flex items-center justify-center size-5"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"
Te6edf3entryTb4b4b4.Te6edf3is_incoming Tff7b72? Ta5d6ff'phone-incoming' Tff7b72: Ta5d6ff'phone-outgoing'
Ta5d6ff"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Te6edf3entryTb4b4b4.Te6edf3is_incoming Tff7b72? Ta5d6ff'text-blue-500' Tff7b72: Ta5d6ff'text-green-500'Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-3"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-sm font-bold text-gray-900 dark:text-white truncate"
Tb4b4b4>
Tff7b72{{ Te6edf3entryTb4b4b4.Te6edf3remote_identity_name Tff7b72|| Te6edf3$tTb4b4b4(Ta5d6ff"call.unknown"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500 font-mono shrink-0"
Tb4b4b4>
Tff7b72{{
Te6edf3entryTb4b4b4.Te6edf3timestamp
Tff7b72? Te6edf3formatDateTimeTb4b4b4(Te6edf3entryTb4b4b4.Te6edf3timestamp Tff7b72* T79c0ff1000Tb4b4b4)
Tff7b72: Ta5d6ff""
Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between mt-0.5"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2 text-[10px] text-gray-500 dark:text-zinc-400"
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"capitalize"Tb4b4b4>Tff7b72{{ Te6edf3entryTb4b4b4.Te6edf3status Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3entryTb4b4b4.Te6edf3duration_seconds Tff7b72> T79c0ff0Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-gray-300 dark:text-zinc-700"
Tb4b4b4>•Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3entryTb4b4b4.Te6edf3duration_seconds Tff7b72> T79c0ff0Ta5d6ff"Tb4b4b4>Tff7b72{{
Te6edf3formatDurationTb4b4b4(Te6edf3entryTb4b4b4.Te6edf3duration_secondsTb4b4b4)
Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-mono text-gray-400 dark:text-zinc-600 truncate mt-0.5 cursor-pointer hover:text-blue-500 transition-colors"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"
Te6edf3entryTb4b4b4.Te6edf3remote_telephony_hash Tff7b72||
Te6edf3entryTb4b4b4.Te6edf3remote_destination_hash Tff7b72||
Te6edf3entryTb4b4b4.Te6edf3remote_identity_hash
Ta5d6ff"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3stopTff7b72=Ta5d6ff"
Te6edf3copyHashTb4b4b4(
Te6edf3entryTb4b4b4.Te6edf3remote_telephony_hash Tff7b72||
Te6edf3entryTb4b4b4.Te6edf3remote_destination_hash Tff7b72||
Te6edf3entryTb4b4b4.Te6edf3remote_identity_hash
Tb4b4b4)
Ta5d6ff"
Tb4b4b4>
Tff7b72{{
Te6edf3formatDestinationHashTb4b4b4(
Te6edf3entryTb4b4b4.Te6edf3remote_telephony_hash Tff7b72||
Te6edf3entryTb4b4b4.Te6edf3remote_destination_hash Tff7b72||
Te6edf3entryTb4b4b4.Te6edf3remote_identity_hash
Tb4b4b4)
Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-1.5 opacity-100 transition-opacity shrink-0 ml-4 lg:opacity-0 lg:group-hover:opacity-100"
Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3entryTb4b4b4.Te6edf3is_contactTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"p-1.5 rounded-lg text-gray-400 hover:text-blue-500 hover:bg-blue-50 dark:hover:bg-blue-900/20 transition-all shrink-0"
Te6edf3titleTff7b72=Ta5d6ff"Add to contacts"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3addContactFromHistoryTb4b4b4(Te6edf3entryTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"account-plus"
Te6edf3classTff7b72=Ta5d6ff"size-4"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"p-1.5 rounded-lg text-gray-400 hover:text-red-500 hover:bg-red-50 dark:hover:bg-red-900/20 transition-all shrink-0"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'common.block'Tb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3blockIdentityTb4b4b4(Te6edf3entryTb4b4b4.Te6edf3remote_identity_hashTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"account-remove"
Te6edf3classTff7b72=Ta5d6ff"size-4"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"p-1.5 rounded-lg text-gray-400 hover:text-blue-500 hover:bg-blue-50 dark:hover:bg-blue-900/20 transition-all shrink-0"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'contacts.send_message'Tb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3openMessageFromHistoryTb4b4b4(Te6edf3entryTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"message-text-outline"
Te6edf3classTff7b72=Ta5d6ff"size-4"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-1.5 px-3 py-1 bg-blue-600 text-white rounded-lg text-[10px] font-bold hover:bg-blue-500 transition-all shadow-md shadow-blue-500/10 shrink-0"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3destinationHash Tff7b72=
Te6edf3entryTb4b4b4.Te6edf3remote_telephony_hash Tff7b72||
Te6edf3entryTb4b4b4.Te6edf3remote_destination_hash Tff7b72||
Te6edf3entryTb4b4b4.Te6edf3remote_identity_hashTb4b4b4;
Te6edf3activeTab Tff7b72= Ta5d6ff'phone'Tb4b4b4;
Te6edf3$nextTickTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3callTb4b4b4(Te6edf3destinationHashTb4b4b4)Tb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"phone" Te6edf3classTff7b72=Ta5d6ff"size-3" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.call_back"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3hasMoreCallHistoryTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-4 border-t border-gray-100 dark:border-zinc-800 text-center bg-gray-50/30 dark:bg-zinc-800/10"
Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold text-blue-600 dark:text-blue-400 hover:underline uppercase tracking-wider"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3loadMoreCallHistoryTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.load_more"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Phonebook Tab -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72=== Ta5d6ff'phonebook'Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex-1 flex flex-col max-w-3xl mx-auto w-full pt-2"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"mb-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative"Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3discoverySearchTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Tb4b4b4:Te6edf3placeholderTff7b72=Ta5d6ff"Ta5d6ff`Ta5d6ffSearch phonebook (Tffd700${Te6edf3totalDiscoveryCountTffd700}Ta5d6ff)...Ta5d6ff`Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-2 pl-10 text-gray-900 dark:text-white shadow-xs ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-blue-600 sm:text-sm dark:bg-zinc-900"
Tb4b4b4@Te6edf3inputTff7b72=Ta5d6ff"Te6edf3onDiscoverySearchInputTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"magnify" Te6edf3classTff7b72=Ta5d6ff"size-5 text-gray-400" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3discoveryAnnouncesTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"my-auto text-center"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"bg-gray-200 dark:bg-zinc-800 p-6 rounded-full inline-block mb-4"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"satellite-uplink" Te6edf3classTff7b72=Ta5d6ff"size-12 text-gray-400" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72h3 Te6edf3classTff7b72=Ta5d6ff"text-lg font-medium text-gray-900 dark:text-white"Tb4b4b4>No Telephony PeersTb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-gray-500 dark:text-zinc-400"Tb4b4b4>Waiting for announces on the mesh.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"border-b border-gray-200 dark:border-zinc-800 overflow-hidden"Tb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"divide-y divide-gray-100 dark:divide-zinc-800"Tb4b4b4>
Tb4b4b4<Tff7b72li
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3announce Tff7b72in Te6edf3discoveryAnnouncesTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3announceTb4b4b4.Te6edf3destination_hashTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"px-4 py-4 hover:bg-gray-50 dark:hover:bg-zinc-800/50 transition-colors"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center space-x-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"shrink-0"Tb4b4b4>
Tb4b4b4<Tff7b72LxmfUserIcon
Tb4b4b4:Te6edf3custom-imageTff7b72=Ta5d6ff"Te6edf3announceTb4b4b4.Te6edf3contact_imageTa5d6ff"
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3announceTb4b4b4.Te6edf3lxmf_user_iconTff7b72?Tb4b4b4.Te6edf3icon_nameTa5d6ff"
Tb4b4b4:Te6edf3icon-foreground-colourTff7b72=Ta5d6ff"Te6edf3announceTb4b4b4.Te6edf3lxmf_user_iconTff7b72?Tb4b4b4.Te6edf3foreground_colourTa5d6ff"
Tb4b4b4:Te6edf3icon-background-colourTff7b72=Ta5d6ff"Te6edf3announceTb4b4b4.Te6edf3lxmf_user_iconTff7b72?Tb4b4b4.Te6edf3background_colourTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-10"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-sm font-bold text-gray-900 dark:text-white truncate"Tb4b4b4>
Tff7b72{{ Te6edf3announceTb4b4b4.Te6edf3display_name Tff7b72|| Ta5d6ff"Anonymous Peer" Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72a
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3announceTb4b4b4.Te6edf3lxmf_destination_hashTa5d6ff"
Tb4b4b4:Te6edf3hrefTff7b72=Ta5d6ff"Ta5d6ff`Ta5d6ff/#/messages/Tffd700${Te6edf3announceTb4b4b4.Te6edf3lxmf_destination_hashTffd700}Ta5d6ff`Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"ml-2 p-1 text-gray-400 hover:text-blue-500 transition-colors"
Te6edf3titleTff7b72=Ta5d6ff"Message via LXMF"
@Te6edf3click.Te6edf3stop
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"message-text-outline"
Te6edf3classTff7b72=Ta5d6ff"size-4"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500 font-mono ml-2 shrink-0"
Tb4b4b4>
Tff7b72{{ Te6edf3formatTimeAgoTb4b4b4(Te6edf3announceTb4b4b4.Te6edf3updated_atTb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between mt-1"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center space-x-2 min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500 font-mono truncate cursor-pointer hover:text-blue-500 transition-colors"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3announceTb4b4b4.Te6edf3destination_hashTa5d6ff"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3stopTff7b72=Ta5d6ff"Te6edf3copyHashTb4b4b4(Te6edf3announceTb4b4b4.Te6edf3destination_hashTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3formatDestinationHashTb4b4b4(Te6edf3announceTb4b4b4.Te6edf3destination_hashTb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3announceTb4b4b4.Te6edf3hops Tff7b72!= Tff7b72nullTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-400 dark:text-zinc-600"
Tb4b4b4>
• Tff7b72{{ Te6edf3announceTb4b4b4.Te6edf3hops Tff7b72}} hops
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] bg-blue-100 text-blue-600 dark:bg-blue-900/30 dark:text-blue-400 px-3 py-1 rounded-full font-bold uppercase tracking-wider hover:bg-blue-200 dark:hover:bg-blue-900/50 transition-colors shrink-0"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3destinationHash Tff7b72= Te6edf3announceTb4b4b4.Te6edf3destination_hashTb4b4b4;
Te6edf3activeTab Tff7b72= Ta5d6ff'phone'Tb4b4b4;
Te6edf3$nextTickTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3callTb4b4b4(Te6edf3destinationHashTb4b4b4)Tb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Call
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3hasMoreDiscoveryTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-3 border-t border-gray-100 dark:border-zinc-800 text-center"
Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"text-xs text-blue-500 hover:text-blue-600 font-bold uppercase tracking-widest"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3loadMoreDiscoveryTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.load_more"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Voicemail Tab -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72=== Ta5d6ff'voicemail'Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex-1 flex flex-col max-w-3xl mx-auto w-full pt-2"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"mb-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative"Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3voicemailSearchTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3placeholderTff7b72=Ta5d6ff"Search voicemails..."
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-2 pl-10 text-gray-900 dark:text-white shadow-xs ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-blue-600 sm:text-sm dark:bg-zinc-900"
Tb4b4b4@Te6edf3inputTff7b72=Ta5d6ff"Te6edf3onVoicemailSearchInputTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"magnify" Te6edf3classTff7b72=Ta5d6ff"size-5 text-gray-400" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Voicemail Settings Card -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3configTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"mb-4 border-b border-gray-200 dark:border-zinc-800 overflow-hidden"Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"w-full px-4 py-3 flex items-center justify-between hover:bg-gray-50 dark:hover:bg-zinc-800/50 transition-colors"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3isVoicemailSettingsExpanded Tff7b72= Tff7b72!Te6edf3isVoicemailSettingsExpandedTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"cog" Te6edf3classTff7b72=Ta5d6ff"size-5 text-blue-500" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72h3 Te6edf3classTff7b72=Ta5d6ff"text-sm font-bold text-gray-900 dark:text-white uppercase tracking-wider"Tb4b4b4>
Voicemail Settings
Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3isVoicemailSettingsExpanded Tff7b72? Ta5d6ff'chevron-up' Tff7b72: Ta5d6ff'chevron-down'Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-5 text-gray-400"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isVoicemailSettingsExpandedTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"px-4 pb-6 space-y-6"Tb4b4b4>
T8b949e<!-- Status Banner -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3voicemailStatusTb4b4b4.Te6edf3has_espeakTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-4 bg-amber-50 dark:bg-amber-900/20 border border-amber-200 dark:border-amber-800 rounded-lg flex gap-3 items-start"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"alert"
Te6edf3classTff7b72=Ta5d6ff"size-5 text-amber-600 dark:text-amber-400 shrink-0"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-amber-800 dark:text-amber-200"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"font-bold mb-1"Tb4b4b4>Dependencies MissingTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>
Voicemail requires `espeak-ng` to generate greetings. Please install it on your
system.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Enabled Toggle -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm font-semibold text-gray-900 dark:text-white"Tb4b4b4>
Enable Voicemail
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-zinc-400"Tb4b4b4>
Accept calls automatically and record messages
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3disabledTff7b72=Ta5d6ff"Tff7b72!Te6edf3voicemailStatusTb4b4b4.Te6edf3has_espeakTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"relative inline-flex h-6 w-11 shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-hidden disabled:opacity-50 disabled:cursor-not-allowed"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3voicemail_enabled Tff7b72? Ta5d6ff'bg-blue-600' Tff7b72: Ta5d6ff'bg-gray-200 dark:bg-zinc-700'Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3configTb4b4b4.Te6edf3voicemail_enabled Tff7b72= Tff7b72!Te6edf3configTb4b4b4.Te6edf3voicemail_enabledTb4b4b4;
Te6edf3updateConfigTb4b4b4(Tb4b4b4{ Te6edf3voicemail_enabledTff7b72: Te6edf3configTb4b4b4.Te6edf3voicemail_enabled Tb4b4b4}Tb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow-sm ring-0 transition duration-200 ease-in-out"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3voicemail_enabled Tff7b72? Ta5d6ff'translate-x-5' Tff7b72: Ta5d6ff'translate-x-0'Ta5d6ff"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Greeting Text -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-2"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-tighter"
Tb4b4b4>Greeting MessageTb4b4b4<Tb4b4b4/Tff7b72label
Tb4b4b4>
Tb4b4b4<Tff7b72textarea
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3voicemail_greetingTa5d6ff"
Te6edf3rowsTff7b72=Ta5d6ff"3"
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-2 text-gray-900 dark:text-white shadow-xs ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-blue-600 sm:text-sm sm:leading-6 dark:bg-zinc-900"
Te6edf3placeholderTff7b72=Ta5d6ff"Enter greeting text..."
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72textareaTb4b4b4>
T8b949e<!-- TTS Settings -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid grid-cols-2 gap-3 mt-2"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-1"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-bold text-gray-500 dark:text-zinc-500 uppercase tracking-tighter"
Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.tts_speed"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72label
Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTb4b4b4.Te6edf3numberTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3voicemail_tts_speedTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"number"
Te6edf3minTff7b72=Ta5d6ff"80"
Te6edf3maxTff7b72=Ta5d6ff"450"
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-1 text-gray-900 dark:text-white shadow-xs ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 focus:ring-2 focus:ring-inset focus:ring-blue-600 text-xs dark:bg-zinc-900"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"Te6edf3updateConfigTb4b4b4(Tb4b4b4{ Te6edf3voicemail_tts_speedTff7b72: Te6edf3configTb4b4b4.Te6edf3voicemail_tts_speed Tb4b4b4}Tb4b4b4)Ta5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-1"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-bold text-gray-500 dark:text-zinc-500 uppercase tracking-tighter"
Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.tts_pitch"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72label
Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTb4b4b4.Te6edf3numberTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3voicemail_tts_pitchTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"number"
Te6edf3minTff7b72=Ta5d6ff"0"
Te6edf3maxTff7b72=Ta5d6ff"99"
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-1 text-gray-900 dark:text-white shadow-xs ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 focus:ring-2 focus:ring-inset focus:ring-blue-600 text-xs dark:bg-zinc-900"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"Te6edf3updateConfigTb4b4b4(Tb4b4b4{ Te6edf3voicemail_tts_pitchTff7b72: Te6edf3configTb4b4b4.Te6edf3voicemail_tts_pitch Tb4b4b4}Tb4b4b4)Ta5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-1"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-bold text-gray-500 dark:text-zinc-500 uppercase tracking-tighter"
Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.tts_word_gap"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72label
Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTb4b4b4.Te6edf3numberTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3voicemail_tts_word_gapTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"number"
Te6edf3minTff7b72=Ta5d6ff"0"
Te6edf3maxTff7b72=Ta5d6ff"100"
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-1 text-gray-900 dark:text-white shadow-xs ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 focus:ring-2 focus:ring-inset focus:ring-blue-600 text-xs dark:bg-zinc-900"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"
Te6edf3updateConfigTb4b4b4(Tb4b4b4{ Te6edf3voicemail_tts_word_gapTff7b72: Te6edf3configTb4b4b4.Te6edf3voicemail_tts_word_gap Tb4b4b4}Tb4b4b4)
Ta5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-1"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-bold text-gray-500 dark:text-zinc-500 uppercase tracking-tighter"
Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.tts_voice"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72label
Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3voicemail_tts_voiceTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-1 text-gray-900 dark:text-white shadow-xs ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 focus:ring-2 focus:ring-inset focus:ring-blue-600 text-xs dark:bg-zinc-900"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"Te6edf3updateConfigTb4b4b4(Tb4b4b4{ Te6edf3voicemail_tts_voiceTff7b72: Te6edf3configTb4b4b4.Te6edf3voicemail_tts_voice Tb4b4b4}Tb4b4b4)Ta5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex justify-between items-center"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500"Tb4b4b4>
This text will be converted to speech using eSpeak NG.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3disabledTff7b72=Ta5d6ff"Tff7b72!Te6edf3voicemailStatusTb4b4b4.Te6edf3has_espeak Tff7b72|| Te6edf3isGeneratingGreetingTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] bg-gray-100 dark:bg-zinc-800 text-gray-700 dark:text-zinc-300 px-3 py-1 rounded-full font-bold hover:bg-gray-200 dark:hover:bg-zinc-700 transition-colors disabled:opacity-50"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3updateConfigTb4b4b4(Tb4b4b4{ Te6edf3voicemail_greetingTff7b72: Te6edf3configTb4b4b4.Te6edf3voicemail_greeting Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3generateGreetingTb4b4b4(Tb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3isGeneratingGreeting Tff7b72? Ta5d6ff"Generating..." Tff7b72: Ta5d6ff"Save & Generate" Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Custom Greeting Upload -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-2"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-tighter"
Tb4b4b4>Custom Audio GreetingTb4b4b4<Tb4b4b4/Tff7b72label
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-3 flex-wrap"Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3refTff7b72=Ta5d6ff"greetingUpload"
Te6edf3typeTff7b72=Ta5d6ff"file"
Te6edf3acceptTff7b72=Ta5d6ff"audio/*"
Te6edf3classTff7b72=Ta5d6ff"hidden"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"Te6edf3uploadGreetingTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3disabledTff7b72=Ta5d6ff"Te6edf3isUploadingGreeting Tff7b72|| Te6edf3voicemailStatusTb4b4b4.Te6edf3is_greeting_recordingTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-xs bg-gray-100 dark:bg-zinc-800 text-gray-700 dark:text-zinc-300 px-4 py-2 rounded-lg font-bold hover:bg-gray-200 dark:hover:bg-zinc-700 transition-colors disabled:opacity-50 flex items-center gap-2"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3$refsTb4b4b4.Te6edf3greetingUploadTb4b4b4.Te6edf3clickTb4b4b4(Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"upload" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3isUploadingGreeting Tff7b72? Ta5d6ff"Uploading..." Tff7b72: Ta5d6ff"Upload Audio File" Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"text-xs px-4 py-2 rounded-lg font-bold transition-colors flex items-center gap-2"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"
Te6edf3voicemailStatusTb4b4b4.Te6edf3is_greeting_recording
Tff7b72? Ta5d6ff'bg-red-500 text-white animate-pulse'
Tff7b72: Ta5d6ff'bg-gray-100 dark:bg-zinc-800 text-gray-700 dark:text-zinc-300 hover:bg-gray-200 dark:hover:bg-zinc-700'
Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3voicemailStatusTb4b4b4.Te6edf3is_greeting_recording
Tff7b72? Te6edf3stopRecordingGreetingMicTb4b4b4(Tb4b4b4)
Tff7b72: Te6edf3startRecordingGreetingMicTb4b4b4(Tb4b4b4)
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3voicemailStatusTb4b4b4.Te6edf3is_greeting_recording Tff7b72? Ta5d6ff'stop' Tff7b72: Ta5d6ff'microphone'Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-4"
Tb4b4b4/Tb4b4b4>
Tff7b72{{
Te6edf3voicemailStatusTb4b4b4.Te6edf3is_greeting_recording Tff7b72? Ta5d6ff"Stop Recording" Tff7b72: Ta5d6ff"Record from Mic"
Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3voicemailStatusTb4b4b4.Te6edf3has_greetingTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"text-xs bg-red-100 dark:bg-red-900/30 text-red-600 dark:text-red-400 px-4 py-2 rounded-lg font-bold hover:bg-red-200 dark:hover:bg-red-900/50 transition-colors flex items-center gap-2"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3deleteGreetingTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"delete" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Remove Greeting
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"text-xs bg-blue-100 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400 px-4 py-2 rounded-lg font-bold hover:bg-blue-200 dark:hover:bg-blue-900/50 transition-colors flex items-center gap-2"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3playGreetingTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3isPlayingGreeting Tff7b72? Ta5d6ff'stop' Tff7b72: Ta5d6ff'play'Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-4"
Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3isPlayingGreeting Tff7b72? Ta5d6ff"Stop Preview" Tff7b72: Ta5d6ff"Preview" Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500 italic"Tb4b4b4>
No custom greeting uploaded (default text will be used)
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500"Tb4b4b4>
Supports MP3, OGG, WAV, M4A, FLAC. Will be converted to Opus.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Delays -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid grid-cols-2 gap-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-2"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-tighter"
Tb4b4b4>Answer Delay (s)Tb4b4b4<Tb4b4b4/Tff7b72label
Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTb4b4b4.Te6edf3numberTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3voicemail_auto_answer_delay_secondsTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"number"
Te6edf3minTff7b72=Ta5d6ff"1"
Te6edf3maxTff7b72=Ta5d6ff"120"
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-1.5 text-gray-900 dark:text-white shadow-xs ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 focus:ring-2 focus:ring-inset focus:ring-blue-600 sm:text-sm dark:bg-zinc-900"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"
Te6edf3updateConfigTb4b4b4(Tb4b4b4{
Te6edf3voicemail_auto_answer_delay_secondsTff7b72:
Te6edf3configTb4b4b4.Te6edf3voicemail_auto_answer_delay_secondsTb4b4b4,
Tb4b4b4}Tb4b4b4)
Ta5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-2"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-tighter"
Tb4b4b4>Max Recording (s)Tb4b4b4<Tb4b4b4/Tff7b72label
Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTb4b4b4.Te6edf3numberTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3voicemail_max_recording_secondsTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"number"
Te6edf3minTff7b72=Ta5d6ff"5"
Te6edf3maxTff7b72=Ta5d6ff"600"
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-1.5 text-gray-900 dark:text-white shadow-xs ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 focus:ring-2 focus:ring-inset focus:ring-blue-600 sm:text-sm dark:bg-zinc-900"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"
Te6edf3updateConfigTb4b4b4(Tb4b4b4{
Te6edf3voicemail_max_recording_secondsTff7b72: Te6edf3configTb4b4b4.Te6edf3voicemail_max_recording_secondsTb4b4b4,
Tb4b4b4}Tb4b4b4)
Ta5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3voicemailsTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"my-auto text-center"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"bg-gray-200 dark:bg-zinc-800 p-6 rounded-full inline-block mb-4"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"voicemail" Te6edf3classTff7b72=Ta5d6ff"size-12 text-gray-400" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72h3 Te6edf3classTff7b72=Ta5d6ff"text-lg font-medium text-gray-900 dark:text-white"Tb4b4b4>No VoicemailsTb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-gray-500 dark:text-zinc-400"Tb4b4b4>
When people leave you messages, they'll show up here.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"border-b border-gray-200 dark:border-zinc-800 overflow-hidden"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"px-4 py-3 border-b border-gray-200 dark:border-zinc-800 flex justify-between items-center"
Tb4b4b4>
Tb4b4b4<Tff7b72h3 Te6edf3classTff7b72=Ta5d6ff"text-sm font-bold text-gray-900 dark:text-white uppercase tracking-wider"Tb4b4b4>
Voicemail Inbox
Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-[10px] bg-blue-100 text-blue-600 dark:bg-blue-900/30 dark:text-blue-400 px-2 py-0.5 rounded-full font-bold uppercase"
Tb4b4b4>
Tff7b72{{ Te6edf3voicemailsTb4b4b4.Te6edf3length Tff7b72}} Messages
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"divide-y divide-gray-100 dark:divide-zinc-800"Tb4b4b4>
Tb4b4b4<Tff7b72li
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3voicemail Tff7b72in Te6edf3voicemailsTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3voicemailTb4b4b4.Te6edf3idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"px-4 py-4 hover:bg-gray-50 dark:hover:bg-zinc-800/50 transition-colors"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4{ Ta5d6ff'bg-blue-50/50 dark:bg-blue-900/10'Tff7b72: Tff7b72!Te6edf3voicemailTb4b4b4.Te6edf3is_read Tb4b4b4}Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-start space-x-4"Tb4b4b4>
T8b949e<!-- Icon / Play/Pause Button -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative shrink-0"Tb4b4b4>
Tb4b4b4<Tff7b72LxmfUserIcon
Tb4b4b4:Te6edf3custom-imageTff7b72=Ta5d6ff"
Te6edf3getContactByHashTb4b4b4(Te6edf3voicemailTb4b4b4.Te6edf3remote_identity_hashTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3custom_image
Ta5d6ff"
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"
Te6edf3voicemailTb4b4b4.Te6edf3remote_icon Tff7b72? Te6edf3voicemailTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3icon_name Tff7b72: Ta5d6ff''
Ta5d6ff"
Tb4b4b4:Te6edf3icon-foreground-colourTff7b72=Ta5d6ff"
Te6edf3voicemailTb4b4b4.Te6edf3remote_icon Tff7b72? Te6edf3voicemailTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3foreground_colour Tff7b72: Ta5d6ff''
Ta5d6ff"
Tb4b4b4:Te6edf3icon-background-colourTff7b72=Ta5d6ff"
Te6edf3voicemailTb4b4b4.Te6edf3remote_icon Tff7b72? Te6edf3voicemailTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3background_colour Tff7b72: Ta5d6ff''
Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-10"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between mb-1"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center min-w-0 mr-2"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-sm font-bold text-gray-900 dark:text-white truncate"Tb4b4b4>
Tff7b72{{ Te6edf3voicemailTb4b4b4.Te6edf3remote_identity_name Tff7b72|| Te6edf3$tTb4b4b4(Ta5d6ff"call.unknown"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3voicemailTb4b4b4.Te6edf3is_readTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"ml-2 shrink-0 size-2 inline-block rounded-full bg-blue-500"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500 font-mono shrink-0"
Tb4b4b4>
Tff7b72{{ Te6edf3formatDateTimeTb4b4b4(Te6edf3voicemailTb4b4b4.Te6edf3timestamp Tff7b72* T79c0ff1000Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-center text-xs text-gray-500 dark:text-zinc-400 space-x-3 mb-3"
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-1"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"clock-outline" Te6edf3classTff7b72=Ta5d6ff"size-3" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3formatDurationTb4b4b4(Te6edf3voicemailTb4b4b4.Te6edf3duration_secondsTb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"opacity-60 font-mono text-[10px] truncate cursor-pointer hover:text-blue-500 transition-colors"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3voicemailTb4b4b4.Te6edf3remote_identity_hashTa5d6ff"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3stopTff7b72=Ta5d6ff"Te6edf3copyHashTb4b4b4(Te6edf3voicemailTb4b4b4.Te6edf3remote_identity_hashTb4b4b4)Ta5d6ff"
Tb4b4b4>Tff7b72{{ Te6edf3formatDestinationHashTb4b4b4(Te6edf3voicemailTb4b4b4.Te6edf3remote_identity_hashTb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"mb-4"Tb4b4b4>
Tb4b4b4<Tff7b72AudioWaveformPlayer
Tb4b4b4:Te6edf3srcTff7b72=Ta5d6ff"Ta5d6ff`Ta5d6ff/api/v1/telephone/voicemails/Tffd700${Te6edf3voicemailTb4b4b4.Te6edf3idTffd700}Ta5d6ff/audioTa5d6ff`Ta5d6ff"
Tb4b4b4@Te6edf3playTff7b72=Ta5d6ff"Te6edf3markVoicemailAsReadTb4b4b4(Te6edf3voicemailTb4b4b4)Ta5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-4"Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] flex items-center gap-1 text-gray-500 hover:text-blue-500 font-bold uppercase tracking-wider transition-colors"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3destinationHash Tff7b72=
Te6edf3voicemailTb4b4b4.Te6edf3remote_telephony_hash Tff7b72||
Te6edf3voicemailTb4b4b4.Te6edf3remote_destination_hash Tff7b72||
Te6edf3voicemailTb4b4b4.Te6edf3remote_identity_hashTb4b4b4;
Te6edf3activeTab Tff7b72= Ta5d6ff'phone'Tb4b4b4;
Te6edf3$nextTickTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3callTb4b4b4(Te6edf3destinationHashTb4b4b4)Tb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"phone" Te6edf3classTff7b72=Ta5d6ff"size-3" Tb4b4b4/Tb4b4b4>
Call Back
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72a
Tb4b4b4:Te6edf3hrefTff7b72=Ta5d6ff"Ta5d6ff`Ta5d6ff/api/v1/telephone/voicemails/Tffd700${Te6edf3voicemailTb4b4b4.Te6edf3idTffd700}Ta5d6ff/audioTa5d6ff`Ta5d6ff"
Tb4b4b4:Te6edf3downloadTff7b72=Ta5d6ff"Ta5d6ff`Ta5d6ffvoicemail_Tffd700${Te6edf3voicemailTb4b4b4.Te6edf3idTffd700}Ta5d6ff.opusTa5d6ff`Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] flex items-center gap-1 text-gray-500 hover:text-blue-500 font-bold uppercase tracking-wider transition-colors"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"download" Te6edf3classTff7b72=Ta5d6ff"size-3" Tb4b4b4/Tb4b4b4>
Download
Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] flex items-center gap-1 text-red-500 hover:text-red-600 font-bold uppercase tracking-wider transition-colors"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3deleteVoicemailTb4b4b4(Te6edf3voicemailTb4b4b4.Te6edf3idTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"delete" Te6edf3classTff7b72=Ta5d6ff"size-3" Tb4b4b4/Tb4b4b4>
Delete
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Contacts Tab -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72=== Ta5d6ff'contacts'Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex-1 flex flex-col max-w-3xl mx-auto w-full pt-2"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"mb-4 flex gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative flex-1"Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3contactsSearchTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3placeholderTff7b72=Ta5d6ff"Search contacts..."
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-2 pl-10 text-gray-900 dark:text-white shadow-xs ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-blue-600 sm:text-sm dark:bg-zinc-900"
Tb4b4b4@Te6edf3inputTff7b72=Ta5d6ff"Te6edf3onContactsSearchInputTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"magnify" Te6edf3classTff7b72=Ta5d6ff"size-5 text-gray-400" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"rounded-lg bg-blue-600 px-3 py-2 text-sm font-semibold text-white shadow-xs hover:bg-blue-500 transition-colors flex items-center gap-2"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3openAddContactModalTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"plus" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Add
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3contactsTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"my-auto text-center"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"bg-gray-200 dark:bg-zinc-800 p-6 rounded-full inline-block mb-4"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"account-multiple" Te6edf3classTff7b72=Ta5d6ff"size-12 text-gray-400" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72h3 Te6edf3classTff7b72=Ta5d6ff"text-lg font-medium text-gray-900 dark:text-white"Tb4b4b4>No ContactsTb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-gray-500 dark:text-zinc-400"Tb4b4b4>Add contacts to quickly call them.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"border-b border-gray-200 dark:border-zinc-800 overflow-hidden"Tb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"divide-y divide-gray-100 dark:divide-zinc-800"Tb4b4b4>
Tb4b4b4<Tff7b72li
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3contact Tff7b72in Te6edf3contactsTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3contactTb4b4b4.Te6edf3idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"px-4 py-3 hover:bg-gray-50 dark:hover:bg-zinc-800/50 transition-colors"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center space-x-3"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"shrink-0"Tb4b4b4>
Tb4b4b4<Tff7b72LxmfUserIcon
Tb4b4b4:Te6edf3custom-imageTff7b72=Ta5d6ff"Te6edf3contactTb4b4b4.Te6edf3custom_imageTa5d6ff"
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3contactTb4b4b4.Te6edf3remote_icon Tff7b72? Te6edf3contactTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3icon_name Tff7b72: Ta5d6ff''Ta5d6ff"
Tb4b4b4:Te6edf3icon-foreground-colourTff7b72=Ta5d6ff"
Te6edf3contactTb4b4b4.Te6edf3remote_icon Tff7b72? Te6edf3contactTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3foreground_colour Tff7b72: Ta5d6ff''
Ta5d6ff"
Tb4b4b4:Te6edf3icon-background-colourTff7b72=Ta5d6ff"
Te6edf3contactTb4b4b4.Te6edf3remote_icon Tff7b72? Te6edf3contactTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3background_colour Tff7b72: Ta5d6ff''
Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-10"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-sm font-bold text-gray-900 dark:text-white truncate"Tb4b4b4>
Tff7b72{{ Te6edf3contactTb4b4b4.Te6edf3name Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3contactTb4b4b4.Te6edf3preferred_ringtone_idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-[9px] px-1.5 py-0.5 rounded-sm bg-amber-50 dark:bg-amber-900/30 text-amber-600 dark:text-amber-400 border border-amber-100 dark:border-amber-800/50 flex items-center gap-1"
Te6edf3titleTff7b72=Ta5d6ff"Custom Ringtone Set"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"music" Te6edf3classTff7b72=Ta5d6ff"size-2.5" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3contactTb4b4b4.Te6edf3preferred_ringtone_id Tff7b72=== Tff7b72-T79c0ff1 Tff7b72? Ta5d6ff"Random" Tff7b72: Ta5d6ff"Custom" Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-1"Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"p-1.5 text-gray-400 hover:text-blue-500 transition-colors"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3openEditContactModalTb4b4b4(Te6edf3contactTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"pencil" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"p-1.5 text-gray-400 hover:text-red-500 transition-colors"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3deleteContactTb4b4b4(Te6edf3contactTb4b4b4.Te6edf3idTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"delete" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between mt-1"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500 font-mono truncate cursor-pointer hover:text-blue-500 transition-colors"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3contactTb4b4b4.Te6edf3remote_identity_hashTa5d6ff"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3stopTff7b72=Ta5d6ff"Te6edf3copyHashTb4b4b4(Te6edf3contactTb4b4b4.Te6edf3remote_identity_hashTb4b4b4)Ta5d6ff"
Tb4b4b4>
ID: Tff7b72{{ Te6edf3formatDestinationHashTb4b4b4(Te6edf3contactTb4b4b4.Te6edf3remote_identity_hashTb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3contactTb4b4b4.Te6edf3lxmf_addressTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-[9px] text-gray-400 dark:text-zinc-500 font-mono truncate cursor-pointer hover:text-blue-500 transition-colors"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3contactTb4b4b4.Te6edf3lxmf_addressTa5d6ff"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3stopTff7b72=Ta5d6ff"Te6edf3copyHashTb4b4b4(Te6edf3contactTb4b4b4.Te6edf3lxmf_addressTb4b4b4)Ta5d6ff"
Tb4b4b4>
LXMF: Tff7b72{{ Te6edf3formatDestinationHashTb4b4b4(Te6edf3contactTb4b4b4.Te6edf3lxmf_addressTb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3contactTb4b4b4.Te6edf3lxst_addressTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-[9px] text-gray-400 dark:text-zinc-500 font-mono truncate cursor-pointer hover:text-blue-500 transition-colors"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3contactTb4b4b4.Te6edf3lxst_addressTa5d6ff"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3stopTff7b72=Ta5d6ff"Te6edf3copyHashTb4b4b4(Te6edf3contactTb4b4b4.Te6edf3lxst_addressTb4b4b4)Ta5d6ff"
Tb4b4b4>
LXST: Tff7b72{{ Te6edf3formatDestinationHashTb4b4b4(Te6edf3contactTb4b4b4.Te6edf3lxst_addressTb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] bg-blue-100 text-blue-600 dark:bg-blue-900/30 dark:text-blue-400 px-3 py-1 rounded-full font-bold uppercase tracking-wider hover:bg-blue-200 dark:hover:bg-blue-900/50 transition-colors shrink-0"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3destinationHash Tff7b72=
Te6edf3contactTb4b4b4.Te6edf3remote_telephony_hash Tff7b72||
Te6edf3contactTb4b4b4.Te6edf3remote_destination_hash Tff7b72||
Te6edf3contactTb4b4b4.Te6edf3remote_identity_hashTb4b4b4;
Te6edf3activeTab Tff7b72= Ta5d6ff'phone'Tb4b4b4;
Te6edf3$nextTickTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3callTb4b4b4(Te6edf3destinationHashTb4b4b4)Tb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Call
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Ringtone Tab -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72=== Ta5d6ff'ringtone' Tff7b72&& Te6edf3configTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex-1 space-y-6 max-w-3xl mx-auto w-full"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"w-full border-b border-gray-200 dark:border-zinc-800 py-6"Tb4b4b4>
Tb4b4b4<Tff7b72template Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isRingtoneEditorOpenTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72RingtoneEditor
Tb4b4b4:Te6edf3ringtoneTff7b72=Ta5d6ff"Te6edf3editingRingtoneForAudioTa5d6ff"
Tb4b4b4@Te6edf3closeTff7b72=Ta5d6ff"Te6edf3isRingtoneEditorOpen Tff7b72= Tff7b72falseTa5d6ff"
Tb4b4b4@Te6edf3savedTff7b72=Ta5d6ff"Te6edf3onRingtoneSavedTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72template Te6edf3v-elseTb4b4b4>
Tb4b4b4<Tff7b72h3
Te6edf3classTff7b72=Ta5d6ff"text-sm font-bold text-gray-900 dark:text-white uppercase tracking-wider mb-6 flex items-center gap-2"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"music" Te6edf3classTff7b72=Ta5d6ff"size-5 text-blue-500" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.ringtone_settings"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-6"Tb4b4b4>
T8b949e<!-- Enabled Toggle & Volume -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col lg:flex-row lg:items-center justify-between gap-6"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between mb-1"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm font-semibold text-gray-900 dark:text-white"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.enable_custom_ringtone"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"relative inline-flex h-6 w-11 shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-hidden"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"
Te6edf3configTb4b4b4.Te6edf3custom_ringtone_enabled
Tff7b72? Ta5d6ff'bg-blue-600'
Tff7b72: Ta5d6ff'bg-gray-200 dark:bg-zinc-700'
Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3configTb4b4b4.Te6edf3custom_ringtone_enabled Tff7b72= Tff7b72!Te6edf3configTb4b4b4.Te6edf3custom_ringtone_enabledTb4b4b4;
Te6edf3updateConfigTb4b4b4(Tb4b4b4{
Te6edf3custom_ringtone_enabledTff7b72: Te6edf3configTb4b4b4.Te6edf3custom_ringtone_enabledTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow-sm ring-0 transition duration-200 ease-in-out"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"
Te6edf3configTb4b4b4.Te6edf3custom_ringtone_enabled
Tff7b72? Ta5d6ff'translate-x-5'
Tff7b72: Ta5d6ff'translate-x-0'
Ta5d6ff"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-zinc-400"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.enable_custom_ringtone_description"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 md:max-w-xs"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between mb-2"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-wider"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.ringtone_volume"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-xs font-mono text-gray-400"
Tb4b4b4>Tff7b72{{ Te6edf3configTb4b4b4.Te6edf3ringtone_volume Tff7b72}}%Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTb4b4b4.Te6edf3numberTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3ringtone_volumeTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"range"
Te6edf3minTff7b72=Ta5d6ff"0"
Te6edf3maxTff7b72=Ta5d6ff"100"
Te6edf3classTff7b72=Ta5d6ff"w-full h-1.5 bg-gray-200 dark:bg-zinc-700 rounded-lg appearance-none cursor-pointer accent-blue-600"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"Te6edf3updateConfigTb4b4b4(Tb4b4b4{ Te6edf3ringtone_volumeTff7b72: Te6edf3configTb4b4b4.Te6edf3ringtone_volume Tb4b4b4}Tb4b4b4)Ta5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Tone Generator Settings -->
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex flex-col lg:flex-row lg:items-center justify-between gap-6 pt-4 border-t border-gray-100 dark:border-zinc-800/50"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between mb-1"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm font-semibold text-gray-900 dark:text-white"Tb4b4b4>
Tone Generator
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"relative inline-flex h-6 w-11 shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-hidden"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"
Te6edf3configTb4b4b4.Te6edf3telephone_tone_generator_enabled
Tff7b72? Ta5d6ff'bg-blue-600'
Tff7b72: Ta5d6ff'bg-gray-200 dark:bg-zinc-700'
Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3configTb4b4b4.Te6edf3telephone_tone_generator_enabled Tff7b72=
Tff7b72!Te6edf3configTb4b4b4.Te6edf3telephone_tone_generator_enabledTb4b4b4;
Te6edf3updateConfigTb4b4b4(Tb4b4b4{
Te6edf3telephone_tone_generator_enabledTff7b72:
Te6edf3configTb4b4b4.Te6edf3telephone_tone_generator_enabledTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow-sm ring-0 transition duration-200 ease-in-out"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"
Te6edf3configTb4b4b4.Te6edf3telephone_tone_generator_enabled
Tff7b72? Ta5d6ff'translate-x-5'
Tff7b72: Ta5d6ff'translate-x-0'
Ta5d6ff"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-zinc-400"Tb4b4b4>
Play audio feedback during call dialing and disconnection.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3telephone_tone_generator_enabledTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex-1 md:max-w-xs"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between mb-2"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-wider"
Tb4b4b4>
Tone Volume
Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-xs font-mono text-gray-400"
Tb4b4b4>Tff7b72{{ Te6edf3configTb4b4b4.Te6edf3telephone_tone_generator_volume Tff7b72}}%Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTb4b4b4.Te6edf3numberTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3telephone_tone_generator_volumeTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"range"
Te6edf3minTff7b72=Ta5d6ff"0"
Te6edf3maxTff7b72=Ta5d6ff"100"
Te6edf3classTff7b72=Ta5d6ff"w-full h-1.5 bg-gray-200 dark:bg-zinc-700 rounded-lg appearance-none cursor-pointer accent-blue-600"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"
Te6edf3updateConfigTb4b4b4(Tb4b4b4{
Te6edf3telephone_tone_generator_volumeTff7b72:
Te6edf3configTb4b4b4.Te6edf3telephone_tone_generator_volumeTb4b4b4,
Tb4b4b4}Tb4b4b4)
Ta5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Preferred Ringtone for Non-Contacts -->
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"p-4 rounded-xl bg-blue-50/50 dark:bg-blue-900/10 border border-blue-100/50 dark:border-blue-900/30"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col lg:flex-row lg:items-center justify-between gap-4"Tb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm font-semibold text-gray-900 dark:text-white"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.default_ringtone"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-zinc-400"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.ringtone_for_non_contacts"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72select
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3configTb4b4b4.Te6edf3ringtone_preferred_idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"input-field py-1.5! px-3! text-sm! rounded-xl! border-gray-200! dark:border-zinc-800! min-w-[200px]"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"
Te6edf3updateConfigTb4b4b4(Tb4b4b4{ Te6edf3ringtone_preferred_idTff7b72: Te6edf3configTb4b4b4.Te6edf3ringtone_preferred_id Tb4b4b4}Tb4b4b4)
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72option Tb4b4b4:Te6edf3valueTff7b72=Ta5d6ff"T79c0ff0Ta5d6ff"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.primary_system_default"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tff7b72option Tb4b4b4:Te6edf3valueTff7b72=Ta5d6ff"Tff7b72-T79c0ff1Ta5d6ff"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.random"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tff7b72optgroup Tb4b4b4:Te6edf3labelTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'call.uploaded_ringtones'Tb4b4b4)Ta5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72option Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3rt Tff7b72in Te6edf3ringtonesTa5d6ff" Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3rtTb4b4b4.Te6edf3idTa5d6ff" Tb4b4b4:Te6edf3valueTff7b72=Ta5d6ff"Te6edf3rtTb4b4b4.Te6edf3idTa5d6ff"Tb4b4b4>
Tff7b72{{ Te6edf3rtTb4b4b4.Te6edf3display_name Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72optgroupTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72selectTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Ringtone List -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72label Te6edf3classTff7b72=Ta5d6ff"text-sm font-semibold text-gray-700 dark:text-zinc-300"Tb4b4b4>
My Ringtones
Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold text-blue-600 dark:text-blue-400 hover:underline flex items-center gap-1"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3$refsTb4b4b4.Te6edf3ringtoneUploadTb4b4b4.Te6edf3clickTb4b4b4(Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"plus" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Upload New
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3refTff7b72=Ta5d6ff"ringtoneUpload"
Te6edf3typeTff7b72=Ta5d6ff"file"
Te6edf3classTff7b72=Ta5d6ff"hidden"
Te6edf3acceptTff7b72=Ta5d6ff"audio/*"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"Te6edf3uploadRingtoneTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3ringtonesTb4b4b4.Te6edf3length Tff7b72> T79c0ff0Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"grid gap-3"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3ringtone Tff7b72in Te6edf3ringtonesTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3ringtoneTb4b4b4.Te6edf3idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"group p-4 rounded-xl border border-gray-100 dark:border-zinc-800 bg-gray-50/50 dark:bg-zinc-800/30 flex items-center gap-4 transition-all hover:shadow-md overflow-hidden"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4{
Ta5d6ff'ring-2 ring-blue-500/20 bg-blue-50/20 dark:bg-blue-900/10'Tff7b72:
Te6edf3ringtoneTb4b4b4.Te6edf3is_primaryTb4b4b4,
Tb4b4b4}Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 min-w-0 overflow-hidden"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3editingRingtoneId Tff7b72=== Te6edf3ringtoneTb4b4b4.Te6edf3idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2"
Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3editingRingtoneNameTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-sm bg-white dark:bg-zinc-900 border border-gray-200 dark:border-zinc-700 rounded-sm px-2 py-1 flex-1 min-w-0"
Tb4b4b4@Te6edf3keyupTb4b4b4.Te6edf3enterTff7b72=Ta5d6ff"Te6edf3saveRingtoneNameTa5d6ff"
Tb4b4b4@Te6edf3blurTff7b72=Ta5d6ff"Te6edf3saveRingtoneNameTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2 min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"text-sm font-medium text-gray-900 dark:text-white truncate"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3ringtoneTb4b4b4.Te6edf3display_nameTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3ringtoneTb4b4b4.Te6edf3display_name Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3ringtoneTb4b4b4.Te6edf3is_primaryTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"shrink-0 text-[10px] uppercase font-bold text-blue-600 dark:text-blue-400 bg-blue-100 dark:bg-blue-900/40 px-1.5 py-0.5 rounded-sm"
Tb4b4b4>
Primary
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"shrink-0 opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-blue-500 transition-opacity"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3startEditingRingtoneTb4b4b4(Te6edf3ringtoneTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"pencil" Te6edf3classTff7b72=Ta5d6ff"size-3" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500 truncate"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3ringtoneTb4b4b4.Te6edf3filenameTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3ringtoneTb4b4b4.Te6edf3filename Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-1"Tb4b4b4>
Tb4b4b4<Tff7b72a
Tb4b4b4:Te6edf3hrefTff7b72=Ta5d6ff"Ta5d6ff`Ta5d6ff/api/v1/telephone/ringtones/Tffd700${Te6edf3ringtoneTb4b4b4.Te6edf3idTffd700}Ta5d6ff/audio?download=1Ta5d6ff`Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-2 rounded-lg hover:bg-white dark:hover:bg-zinc-800 text-gray-500 dark:text-gray-400 hover:text-blue-500 transition-colors"
Te6edf3titleTff7b72=Ta5d6ff"Download"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"download" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"p-2 rounded-lg hover:bg-white dark:hover:bg-zinc-800 text-gray-500 dark:text-gray-400 transition-colors"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"
Te6edf3isPlayingRingtone Tff7b72&& Te6edf3playingRingtoneId Tff7b72=== Te6edf3ringtoneTb4b4b4.Te6edf3id
Tff7b72? Ta5d6ff'Stop'
Tff7b72: Ta5d6ff'Preview'
Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3playRingtonePreviewTb4b4b4(Te6edf3ringtoneTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"
Te6edf3isPlayingRingtone Tff7b72&& Te6edf3playingRingtoneId Tff7b72=== Te6edf3ringtoneTb4b4b4.Te6edf3id
Tff7b72? Ta5d6ff'stop'
Tff7b72: Ta5d6ff'play'
Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-5"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"p-2 rounded-lg hover:bg-white dark:hover:bg-zinc-800 text-gray-500 dark:text-gray-400 hover:text-blue-500 transition-colors"
Te6edf3titleTff7b72=Ta5d6ff"Edit Audio"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3openRingtoneEditorTb4b4b4(Te6edf3ringtoneTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"content-cut" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3ringtoneTb4b4b4.Te6edf3is_primaryTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-2 rounded-lg hover:bg-white dark:hover:bg-zinc-800 text-gray-500 dark:text-gray-400 hover:text-blue-500 transition-colors"
Te6edf3titleTff7b72=Ta5d6ff"Set as Primary"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3setPrimaryRingtoneTb4b4b4(Te6edf3ringtoneTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"star-outline" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"p-2 rounded-lg hover:bg-white dark:hover:bg-zinc-800 text-gray-500 dark:text-gray-400 hover:text-red-500 transition-colors"
Te6edf3titleTff7b72=Ta5d6ff"Delete"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3deleteRingtoneTb4b4b4(Te6edf3ringtoneTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"delete-outline" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-else
Te6edf3classTff7b72=Ta5d6ff"flex flex-col items-center justify-center p-8 border-2 border-dashed border-gray-100 dark:border-zinc-800 rounded-2xl bg-gray-50/30 dark:bg-zinc-900/20"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"music-off"
Te6edf3classTff7b72=Ta5d6ff"size-8 text-gray-300 dark:text-zinc-700 mb-2"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-zinc-500"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.no_custom_ringtone_uploaded"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Recordings Tab -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72=== Ta5d6ff'recordings'Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex-1 flex flex-col max-w-3xl mx-auto w-full"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"mb-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative"Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3recordingSearchTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3placeholderTff7b72=Ta5d6ff"Search recordings..."
Te6edf3classTff7b72=Ta5d6ff"block w-full rounded-lg border-0 py-2 pl-10 text-gray-900 dark:text-white shadow-xs ring-1 ring-inset ring-gray-300 dark:ring-zinc-800 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-blue-600 sm:text-sm dark:bg-zinc-900"
Tb4b4b4@Te6edf3inputTff7b72=Ta5d6ff"Te6edf3onRecordingSearchInputTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"magnify" Te6edf3classTff7b72=Ta5d6ff"size-5 text-gray-400" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 overflow-y-auto min-h-0"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"border-b border-gray-200 dark:border-zinc-800 overflow-hidden"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3recordingsTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"py-12 text-center"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"microphone-off"
Te6edf3classTff7b72=Ta5d6ff"size-12 text-gray-300 dark:text-zinc-700 mx-auto mb-2"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-gray-500 dark:text-zinc-500 text-sm"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.no_recordings"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"divide-y divide-gray-100 dark:divide-zinc-800"Tb4b4b4>
Tb4b4b4<Tff7b72li
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3recording Tff7b72in Te6edf3recordingsTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3recordingTb4b4b4.Te6edf3idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"px-4 py-4 hover:bg-gray-50 dark:hover:bg-zinc-800/50 transition-colors"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-start space-x-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"shrink-0"Tb4b4b4>
Tb4b4b4<Tff7b72LxmfUserIcon
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3recordingTb4b4b4.Te6edf3remote_iconTa5d6ff"
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3recordingTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3icon_nameTa5d6ff"
Tb4b4b4:Te6edf3icon-foreground-colourTff7b72=Ta5d6ff"Te6edf3recordingTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3foreground_colourTa5d6ff"
Tb4b4b4:Te6edf3icon-background-colourTff7b72=Ta5d6ff"Te6edf3recordingTb4b4b4.Te6edf3remote_iconTb4b4b4.Te6edf3background_colourTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-10"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-else
Te6edf3classTff7b72=Ta5d6ff"size-10 rounded-full bg-gray-100 dark:bg-zinc-800 flex items-center justify-center text-gray-400"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"account" Te6edf3classTff7b72=Ta5d6ff"size-6" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between mb-1"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-sm font-bold text-gray-900 dark:text-white truncate"Tb4b4b4>
Tff7b72{{ Te6edf3recordingTb4b4b4.Te6edf3remote_identity_name Tff7b72|| Te6edf3$tTb4b4b4(Ta5d6ff"call.unknown"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-500 dark:text-zinc-500 font-mono"Tb4b4b4>
Tff7b72{{ Te6edf3formatDateTimeTb4b4b4(Te6edf3recordingTb4b4b4.Te6edf3timestamp Tff7b72* T79c0ff1000Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-center text-xs text-gray-500 dark:text-zinc-400 space-x-3 mb-3"
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-1"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"clock-outline" Te6edf3classTff7b72=Ta5d6ff"size-3" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3formatDurationTb4b4b4(Te6edf3recordingTb4b4b4.Te6edf3duration_secondsTb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"opacity-60 font-mono text-[10px] truncate"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3stopTff7b72=Ta5d6ff"Te6edf3copyHashTb4b4b4(Te6edf3recordingTb4b4b4.Te6edf3remote_identity_hashTb4b4b4)Ta5d6ff"
Tb4b4b4>Tff7b72{{ Te6edf3formatDestinationHashTb4b4b4(Te6edf3recordingTb4b4b4.Te6edf3remote_identity_hashTb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2"Tb4b4b4>
T8b949e<!-- RX Play -->
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"px-2 py-1 rounded-md bg-blue-500/10 hover:bg-blue-500/20 text-blue-600 dark:text-blue-400 text-[10px] font-bold uppercase tracking-wider transition-all flex items-center gap-1"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3playRecordingTb4b4b4(Te6edf3recordingTb4b4b4, Ta5d6ff'rx'Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"
Te6edf3playingRecordingId Tff7b72=== Te6edf3recordingTb4b4b4.Te6edf3id Tff7b72&& Te6edf3playingSide Tff7b72=== Ta5d6ff'rx'
Tff7b72? Ta5d6ff'stop'
Tff7b72: Ta5d6ff'play'
Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-3"
Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.remote_rx"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
T8b949e<!-- TX Play -->
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"px-2 py-1 rounded-md bg-green-500/10 hover:bg-green-500/20 text-green-600 dark:text-green-400 text-[10px] font-bold uppercase tracking-wider transition-all flex items-center gap-1"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3playRecordingTb4b4b4(Te6edf3recordingTb4b4b4, Ta5d6ff'tx'Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"
Te6edf3playingRecordingId Tff7b72=== Te6edf3recordingTb4b4b4.Te6edf3id Tff7b72&& Te6edf3playingSide Tff7b72=== Ta5d6ff'tx'
Tff7b72? Ta5d6ff'stop'
Tff7b72: Ta5d6ff'play'
Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"size-3"
Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.local_tx"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Download RX -->
Tb4b4b4<Tff7b72a
Tb4b4b4:Te6edf3hrefTff7b72=Ta5d6ff"Ta5d6ff`Ta5d6ff/api/v1/telephone/recordings/Tffd700${Te6edf3recordingTb4b4b4.Te6edf3idTffd700}Ta5d6ff/audio/rxTa5d6ff`Ta5d6ff"
Tb4b4b4:Te6edf3downloadTff7b72=Ta5d6ff"Ta5d6ff`Ta5d6ffrecording_Tffd700${Te6edf3recordingTb4b4b4.Te6edf3idTffd700}Ta5d6ff_rx.opusTa5d6ff`Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-1.5 text-gray-400 hover:text-blue-500 transition-colors"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'call.download_rx'Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"download" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>
T8b949e<!-- Download TX -->
Tb4b4b4<Tff7b72a
Tb4b4b4:Te6edf3hrefTff7b72=Ta5d6ff"Ta5d6ff`Ta5d6ff/api/v1/telephone/recordings/Tffd700${Te6edf3recordingTb4b4b4.Te6edf3idTffd700}Ta5d6ff/audio/txTa5d6ff`Ta5d6ff"
Tb4b4b4:Te6edf3downloadTff7b72=Ta5d6ff"Ta5d6ff`Ta5d6ffrecording_Tffd700${Te6edf3recordingTb4b4b4.Te6edf3idTffd700}Ta5d6ff_tx.opusTa5d6ff`Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-1.5 text-gray-400 hover:text-green-500 transition-colors"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'call.download_tx'Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"download" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"p-1.5 text-gray-400 hover:text-red-500 transition-colors"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3deleteRecordingTb4b4b4(Te6edf3recordingTb4b4b4.Te6edf3idTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"delete" Te6edf3classTff7b72=Ta5d6ff"size-4" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Contact Modal -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isContactModalOpenTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"fixed inset-0 z-150 flex items-center justify-center p-4 bg-black/60 backdrop-blur-xs transition-opacity"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3selfTff7b72=Ta5d6ff"Te6edf3isContactModalOpen Tff7b72= Tff7b72falseTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"w-full max-w-lg bg-white dark:bg-zinc-900 rounded-3xl shadow-2xl overflow-hidden transform transition-all scale-100"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"px-6 py-5 border-b border-gray-100 dark:border-zinc-800 flex items-center justify-between bg-gray-50/50 dark:bg-zinc-900/50"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-3"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"p-2 bg-blue-100 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400 rounded-xl"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"account-plus" Te6edf3classTff7b72=Ta5d6ff"size-6" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72h3 Te6edf3classTff7b72=Ta5d6ff"text-xl font-bold text-gray-900 dark:text-white tracking-tight"Tb4b4b4>
Tff7b72{{ Te6edf3editingContact Tff7b72? Te6edf3$tTb4b4b4(Ta5d6ff"call.edit_contact"Tb4b4b4) Tff7b72: Te6edf3$tTb4b4b4(Ta5d6ff"call.add_contact"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"p-2 text-gray-400 hover:text-gray-600 dark:hover:text-zinc-200 hover:bg-gray-100 dark:hover:bg-zinc-800 rounded-full transition-all"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3isContactModalOpen Tff7b72= Tff7b72falseTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"close" Te6edf3classTff7b72=Ta5d6ff"size-6" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"p-6 space-y-6"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col items-center justify-center pb-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative group"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"size-24 rounded-full overflow-hidden bg-gray-100 dark:bg-zinc-800 border-2 border-dashed border-gray-300 dark:border-zinc-700 flex items-center justify-center"
Tb4b4b4>
Tb4b4b4<Tff7b72img
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3contactFormTb4b4b4.Te6edf3custom_imageTa5d6ff"
Tb4b4b4:Te6edf3srcTff7b72=Ta5d6ff"Te6edf3contactFormTb4b4b4.Te6edf3custom_imageTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"w-full h-full object-cover"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3v-else Te6edf3icon-nameTff7b72=Ta5d6ff"camera-plus" Te6edf3classTff7b72=Ta5d6ff"size-8 text-gray-400" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"absolute inset-0 flex items-center justify-center bg-black/40 text-white opacity-0 group-hover:opacity-100 transition-opacity rounded-full"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3$refsTb4b4b4.Te6edf3contactImageInputTb4b4b4.Te6edf3clickTb4b4b4(Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold"Tb4b4b4>Tff7b72{{
Te6edf3contactFormTb4b4b4.Te6edf3custom_image Tff7b72? Ta5d6ff"Change" Tff7b72: Ta5d6ff"Upload"
Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3contactFormTb4b4b4.Te6edf3custom_imageTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"absolute -top-1 -right-1 p-1 bg-red-500 text-white rounded-full shadow-lg hover:bg-red-600 transition-colors"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3contactFormTb4b4b4.Te6edf3custom_image Tff7b72= Tff7b72nullTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"close" Te6edf3classTff7b72=Ta5d6ff"size-3" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3refTff7b72=Ta5d6ff"contactImageInput"
Te6edf3typeTff7b72=Ta5d6ff"file"
Te6edf3classTff7b72=Ta5d6ff"hidden"
Te6edf3acceptTff7b72=Ta5d6ff"image/*"
Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"Te6edf3onContactImageChangeTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-gray-400 mt-2 uppercase font-bold tracking-widest"Tb4b4b4>Profile ImageTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"block text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-wider mb-1.5 ml-1"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.contact_name"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72input Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3contactFormTb4b4b4.Te6edf3nameTa5d6ff" Te6edf3typeTff7b72=Ta5d6ff"text" Te6edf3classTff7b72=Ta5d6ff"input-field" Te6edf3placeholderTff7b72=Ta5d6ff"e.g. John Doe" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"block text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-wider mb-1.5 ml-1"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.identity_hash"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3contactFormTb4b4b4.Te6edf3remote_identity_hashTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3classTff7b72=Ta5d6ff"input-field font-mono text-sm"
Te6edf3placeholderTff7b72=Ta5d6ff"e.g. a39610c89d18bb48c73e429582423c24"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid grid-cols-1 sm:grid-cols-2 gap-4"Tb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"block text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-wider mb-1.5 ml-1"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"app.lxmf_address"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3contactFormTb4b4b4.Te6edf3lxmf_addressTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3classTff7b72=Ta5d6ff"input-field font-mono text-xs"
Te6edf3placeholderTff7b72=Ta5d6ff"Optional"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"block text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-wider mb-1.5 ml-1"
Tb4b4b4>
LXST Address
Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3contactFormTb4b4b4.Te6edf3lxst_addressTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3classTff7b72=Ta5d6ff"input-field font-mono text-xs"
Te6edf3placeholderTff7b72=Ta5d6ff"Optional"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3classTff7b72=Ta5d6ff"block text-xs font-bold text-gray-500 dark:text-zinc-400 uppercase tracking-wider mb-1.5 ml-1"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.preferred_ringtone"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72select Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3contactFormTb4b4b4.Te6edf3preferred_ringtone_idTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"input-field"Tb4b4b4>
Tb4b4b4<Tff7b72option Tb4b4b4:Te6edf3valueTff7b72=Ta5d6ff"Tff7b72nullTa5d6ff"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.default_global_setting"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tff7b72option Tb4b4b4:Te6edf3valueTff7b72=Ta5d6ff"Tff7b72-T79c0ff1Ta5d6ff"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.random"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tff7b72optgroup Tb4b4b4:Te6edf3labelTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'call.uploaded_ringtones'Tb4b4b4)Ta5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72option Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3rt Tff7b72in Te6edf3ringtonesTa5d6ff" Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3rtTb4b4b4.Te6edf3idTa5d6ff" Tb4b4b4:Te6edf3valueTff7b72=Ta5d6ff"Te6edf3rtTb4b4b4.Te6edf3idTa5d6ff"Tb4b4b4>
Tff7b72{{ Te6edf3rtTb4b4b4.Te6edf3display_name Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72optgroupTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72selectTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex gap-3 mt-8"Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"flex-1 px-6 py-3 rounded-2xl bg-gray-100 dark:bg-zinc-800 text-gray-700 dark:text-zinc-300 font-bold hover:bg-gray-200 dark:hover:bg-zinc-700 transition-all active:scale-95"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3isContactModalOpen Tff7b72= Tff7b72falseTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"common.cancel"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"flex-2 px-6 py-3 rounded-2xl bg-blue-600 text-white font-bold shadow-lg shadow-blue-600/20 hover:bg-blue-500 transition-all active:scale-95"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3saveContactTb4b4b4(Te6edf3contactFormTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"call.save_contact"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72scriptTb4b4b4>
Tff7b72import Te6edf3GlobalState Tff7b72from Ta5d6ff"../../js/GlobalState"Tb4b4b4;
Tff7b72import Te6edf3GlobalEmitter Tff7b72from Ta5d6ff"../../js/GlobalEmitter"Tb4b4b4;
Tff7b72import Te6edf3Utils Tff7b72from Ta5d6ff"../../js/Utils"Tb4b4b4;
Tff7b72import Te6edf3Compressor Tff7b72from Ta5d6ff"compressorjs"Tb4b4b4;
Tff7b72import Te6edf3MaterialDesignIcon Tff7b72from Ta5d6ff"../MaterialDesignIcon.vue"Tb4b4b4;
Tff7b72import Te6edf3LxmfUserIcon Tff7b72from Ta5d6ff"../LxmfUserIcon.vue"Tb4b4b4;
Tff7b72import Te6edf3Toggle Tff7b72from Ta5d6ff"../forms/Toggle.vue"Tb4b4b4;
Tff7b72import Te6edf3ToastUtils Tff7b72from Ta5d6ff"../../js/ToastUtils"Tb4b4b4;
Tff7b72import Te6edf3RingtoneEditor Tff7b72from Ta5d6ff"./RingtoneEditor.vue"Tb4b4b4;
Tff7b72import Te6edf3AudioWaveformPlayer Tff7b72from Ta5d6ff"../messages/AudioWaveformPlayer.vue"Tb4b4b4;
T8b949e// Keep this as a same-origin static asset URL so strict CSP can load it.
Tff7b72const Te6edf3telephonePcmCaptureWorkletUrl Tff7b72= Ta5d6ff"/assets/js/telephone-pcm-capture.worklet.js"Tb4b4b4;
Tff7b72export Tff7b72default Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"CallPage"Tb4b4b4,
Te6edf3componentsTff7b72: Tb4b4b4{
Te6edf3MaterialDesignIconTb4b4b4,
Te6edf3LxmfUserIconTb4b4b4,
Te6edf3ToggleTb4b4b4,
Te6edf3RingtoneEditorTb4b4b4,
Te6edf3AudioWaveformPlayerTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3dataTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{
Te6edf3configTff7b72: Tff7b72nullTb4b4b4,
Te6edf3activeCallTff7b72: Tff7b72nullTb4b4b4,
Te6edf3audioProfilesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3selectedAudioProfileIdTff7b72: Tff7b72nullTb4b4b4,
Te6edf3destinationHashTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3callHistoryTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3callHistorySearchTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3callHistoryLimitTff7b72: T79c0ff10Tb4b4b4,
Te6edf3callHistoryOffsetTff7b72: T79c0ff0Tb4b4b4,
Te6edf3hasMoreCallHistoryTff7b72: Tff7b72falseTb4b4b4,
Te6edf3isCallEndedTff7b72: Tff7b72falseTb4b4b4,
Te6edf3wasDeclinedTff7b72: Tff7b72falseTb4b4b4,
Te6edf3wasVoicemailTff7b72: Tff7b72falseTb4b4b4,
Te6edf3lastCallTff7b72: Tff7b72nullTb4b4b4,
Te6edf3endedTimeoutTff7b72: Tff7b72nullTb4b4b4,
Te6edf3activeTabTff7b72: Ta5d6ff"phone"Tb4b4b4,
Te6edf3voicemailsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3unreadVoicemailsCountTff7b72: T79c0ff0Tb4b4b4,
Te6edf3voicemailStatusTff7b72: Tb4b4b4{
Te6edf3has_espeakTff7b72: Tff7b72falseTb4b4b4,
Te6edf3is_recordingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3is_greeting_recordingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3has_greetingTff7b72: Tff7b72falseTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3isGeneratingGreetingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3isUploadingGreetingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3isUploadingRingtoneTff7b72: Tff7b72falseTb4b4b4,
Te6edf3playingVoicemailIdTff7b72: Tff7b72nullTb4b4b4,
Te6edf3audioPlayerTff7b72: Tff7b72nullTb4b4b4,
Te6edf3isPlayingGreetingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3isPlayingRingtoneTff7b72: Tff7b72falseTb4b4b4,
Te6edf3ringtoneStatusTff7b72: Tb4b4b4{
Te6edf3has_custom_ringtoneTff7b72: Tff7b72falseTb4b4b4,
Te6edf3enabledTff7b72: Tff7b72falseTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3ringtonesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3editingRingtoneIdTff7b72: Tff7b72nullTb4b4b4,
Te6edf3editingRingtoneNameTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3elapsedTimeIntervalTff7b72: Tff7b72nullTb4b4b4,
Te6edf3voicemailSearchTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3discoverySearchTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3discoveryAnnouncesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3totalDiscoveryCountTff7b72: T79c0ff0Tb4b4b4,
Te6edf3discoveryLimitTff7b72: T79c0ff10Tb4b4b4,
Te6edf3discoveryOffsetTff7b72: T79c0ff0Tb4b4b4,
Te6edf3hasMoreDiscoveryTff7b72: Tff7b72trueTb4b4b4,
Te6edf3contactsSearchTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3contactsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3isContactModalOpenTff7b72: Tff7b72falseTb4b4b4,
Te6edf3editingContactTff7b72: Tff7b72nullTb4b4b4,
Te6edf3contactFormTff7b72: Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3remote_identity_hashTff7b72: Ta5d6ff""Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3searchDebounceTimeoutTff7b72: Tff7b72nullTb4b4b4,
Te6edf3isVoicemailSettingsExpandedTff7b72: Tff7b72falseTb4b4b4,
Te6edf3selectedSuggestionIndexTff7b72: Tff7b72-T79c0ff1Tb4b4b4,
Te6edf3isCallInputFocusedTff7b72: Tff7b72falseTb4b4b4,
Te6edf3recordingsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3isMicMutingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3isSpeakerMutingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3recordingSearchTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3playingRecordingIdTff7b72: Tff7b72nullTb4b4b4,
Te6edf3playingSideTff7b72: Tff7b72nullTb4b4b4,
Te6edf3isRingtoneEditorOpenTff7b72: Tff7b72falseTb4b4b4,
Te6edf3editingRingtoneForAudioTff7b72: Tff7b72nullTb4b4b4,
Te6edf3localMicMutedTff7b72: Tff7b72falseTb4b4b4,
Te6edf3localSpeakerMutedTff7b72: Tff7b72falseTb4b4b4,
Te6edf3initiationStatusTff7b72: Tff7b72nullTb4b4b4,
Te6edf3initiationTargetHashTff7b72: Tff7b72nullTb4b4b4,
Te6edf3initiationTargetNameTff7b72: Tff7b72nullTb4b4b4,
Te6edf3audioWsTff7b72: Tff7b72nullTb4b4b4,
Te6edf3audioCtxTff7b72: Tff7b72nullTb4b4b4,
Te6edf3audioStreamTff7b72: Tff7b72nullTb4b4b4,
Te6edf3audioSourceNodeTff7b72: Tff7b72nullTb4b4b4,
Te6edf3audioNoiseHighpassTff7b72: Tff7b72nullTb4b4b4,
Te6edf3audioNoiseCompressorTff7b72: Tff7b72nullTb4b4b4,
Te6edf3audioProcessorTff7b72: Tff7b72nullTb4b4b4,
Te6edf3audioWorkletNodeTff7b72: Tff7b72nullTb4b4b4,
Te6edf3audioSilentGainTff7b72: Tff7b72nullTb4b4b4,
Te6edf3audioFrameMsTff7b72: T79c0ff60Tb4b4b4,
Te6edf3audioInputDevicesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3audioOutputDevicesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3selectedAudioInputIdTff7b72: Tff7b72nullTb4b4b4,
Te6edf3selectedAudioOutputIdTff7b72: Tff7b72nullTb4b4b4,
Te6edf3remoteAudioElTff7b72: Tff7b72nullTb4b4b4,
Te6edf3useAndroidNativeTelephoneTff7b72: Tff7b72falseTb4b4b4,
Te6edf3androidNativeTelephoneListenerTff7b72: Tff7b72nullTb4b4b4,
Te6edf3localAudioLevelTff7b72: T79c0ff0Tb4b4b4,
Te6edf3remoteAudioLevelTff7b72: T79c0ff0Tb4b4b4,
Te6edf3localAudioTargetTff7b72: T79c0ff0Tb4b4b4,
Te6edf3remoteAudioTargetTff7b72: T79c0ff0Tb4b4b4,
Te6edf3visualizerRafIdTff7b72: Tff7b72nullTb4b4b4,
Te6edf3visualizerPhaseTff7b72: T79c0ff0Tb4b4b4,
Te6edf3visualizerEnabledTff7b72: Tff7b72trueTb4b4b4,
Te6edf3prevCallTxBytesTff7b72: T79c0ff0Tb4b4b4,
Te6edf3prevCallRxBytesTff7b72: T79c0ff0Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3computedTff7b72: Tb4b4b4{
Te6edf3isMicMutedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3localMicMutedTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3isSpeakerMutedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3localSpeakerMutedTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3elapsedTimeTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3activeCallTff7b72?Tb4b4b4.Te6edf3call_start_timeTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3elapsed Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Tffa657DateTb4b4b4.Te6edf3nowTb4b4b4(Tb4b4b4) Tff7b72/ T79c0ff1000 Tff7b72- Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4.Te6edf3call_start_timeTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3formatMinutesSecondsTb4b4b4(Te6edf3elapsedTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3callDurationTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3isCallEnded Tff7b72|| Tff7b72!Tff7b72thisTb4b4b4.Te6edf3lastCallTff7b72?Tb4b4b4.Te6edf3call_start_timeTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3duration Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Tffa657DateTb4b4b4.Te6edf3nowTb4b4b4(Tb4b4b4) Tff7b72/ T79c0ff1000 Tff7b72- Tff7b72thisTb4b4b4.Te6edf3lastCallTb4b4b4.Te6edf3call_start_timeTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3formatMinutesSecondsTb4b4b4(Te6edf3durationTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3newCallSuggestionsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3isCallInputFocusedTb4b4b4) Tff7b72return Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3search Tff7b72= Tff7b72thisTb4b4b4.Te6edf3destinationHashTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3suggestions Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3seenHashes Tff7b72= Tff7b72new Tffa657SetTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e// 1. Check contacts
Tff7b72thisTb4b4b4.Te6edf3contactsTb4b4b4.Te6edf3forEachTb4b4b4(Tb4b4b4(Te6edf3cTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3seenHashesTb4b4b4.Te6edf3hasTb4b4b4(Te6edf3cTb4b4b4.Te6edf3remote_identity_hashTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(
Tff7b72!Te6edf3search Tff7b72||
Te6edf3cTb4b4b4.Te6edf3nameTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3includesTb4b4b4(Te6edf3searchTb4b4b4) Tff7b72||
Te6edf3cTb4b4b4.Te6edf3remote_identity_hashTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3includesTb4b4b4(Te6edf3searchTb4b4b4)
Tb4b4b4) Tb4b4b4{
Te6edf3suggestionsTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{
Te6edf3nameTff7b72: Te6edf3cTb4b4b4.Te6edf3nameTb4b4b4,
Te6edf3hashTff7b72: Te6edf3cTb4b4b4.Te6edf3remote_telephony_hash Tff7b72|| Te6edf3cTb4b4b4.Te6edf3remote_destination_hash Tff7b72|| Te6edf3cTb4b4b4.Te6edf3remote_identity_hashTb4b4b4,
Te6edf3typeTff7b72: Ta5d6ff"contact"Tb4b4b4,
Te6edf3iconTff7b72: Ta5d6ff"account"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3seenHashesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3cTb4b4b4.Te6edf3remote_identity_hashTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;
T8b949e// 2. Check call history
Tff7b72thisTb4b4b4.Te6edf3callHistoryTb4b4b4.Te6edf3forEachTb4b4b4(Tb4b4b4(Te6edf3hTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3seenHashesTb4b4b4.Te6edf3hasTb4b4b4(Te6edf3hTb4b4b4.Te6edf3remote_identity_hashTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(
Tff7b72!Te6edf3search Tff7b72||
Tb4b4b4(Te6edf3hTb4b4b4.Te6edf3remote_identity_name Tff7b72&& Te6edf3hTb4b4b4.Te6edf3remote_identity_nameTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3includesTb4b4b4(Te6edf3searchTb4b4b4)Tb4b4b4) Tff7b72||
Te6edf3hTb4b4b4.Te6edf3remote_identity_hashTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3includesTb4b4b4(Te6edf3searchTb4b4b4)
Tb4b4b4) Tb4b4b4{
Te6edf3suggestionsTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{
Te6edf3nameTff7b72: Te6edf3hTb4b4b4.Te6edf3remote_identity_name Tff7b72|| Te6edf3hTb4b4b4.Te6edf3remote_identity_hashTb4b4b4.Te6edf3substringTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff8Tb4b4b4)Tb4b4b4,
Te6edf3hashTff7b72: Te6edf3hTb4b4b4.Te6edf3remote_telephony_hash Tff7b72|| Te6edf3hTb4b4b4.Te6edf3remote_destination_hash Tff7b72|| Te6edf3hTb4b4b4.Te6edf3remote_identity_hashTb4b4b4,
Te6edf3typeTff7b72: Ta5d6ff"history"Tb4b4b4,
Te6edf3iconTff7b72: Ta5d6ff"history"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3seenHashesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3hTb4b4b4.Te6edf3remote_identity_hashTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3suggestionsTb4b4b4.Te6edf3sliceTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff8Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3watchTff7b72: Tb4b4b4{
Te6edf3destinationHashTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3selectedSuggestionIndex Tff7b72= Tff7b72-T79c0ff1Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3activeTabTb4b4b4(Te6edf3newTabTb4b4b4) Tb4b4b4{
Te6edf3GlobalStateTb4b4b4.Te6edf3activeCallTab Tff7b72= Te6edf3newTabTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3newTab Tff7b72=== Ta5d6ff"recordings"Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getRecordingsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3activeCallTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3stopAudioVisualizerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3mountedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getConfigTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getAudioProfilesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getHistoryTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getVoicemailsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getRecordingsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getContactsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getDiscoveryTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getVoicemailStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getRingtonesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getRingtoneStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3GlobalEmitterTb4b4b4.Te6edf3onTb4b4b4(Ta5d6ff"telephone-history-updated"Tb4b4b4, Tff7b72thisTb4b4b4.Te6edf3getHistoryTb4b4b4)Tb4b4b4;
Te6edf3GlobalEmitterTb4b4b4.Te6edf3onTb4b4b4(Ta5d6ff"telephone-history-updated"Tb4b4b4, Tff7b72thisTb4b4b4.Te6edf3getVoicemailsTb4b4b4)Tb4b4b4;
T8b949e// poll for status
Tff7b72thisTb4b4b4.Te6edf3statusInterval Tff7b72= Te6edf3setIntervalTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getVoicemailStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getRingtoneStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff1000Tb4b4b4)Tb4b4b4;
T8b949e// poll for history/voicemails less frequently
Tff7b72thisTb4b4b4.Te6edf3historyInterval Tff7b72= Te6edf3setIntervalTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getHistoryTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getVoicemailsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getRecordingsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getContactsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getDiscoveryTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff10000Tb4b4b4)Tb4b4b4;
T8b949e// update elapsed time every second
Tff7b72thisTb4b4b4.Te6edf3elapsedTimeInterval Tff7b72= Te6edf3setIntervalTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3$forceUpdateTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff1000Tb4b4b4)Tb4b4b4;
T8b949e// autofill destination hash and tab from query string
Tff7b72const Te6edf3destinationHash Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$routeTb4b4b4.Te6edf3queryTb4b4b4.Te6edf3destination_hashTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3destinationHashTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3destinationHash Tff7b72= Te6edf3destinationHashTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3tab Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$routeTb4b4b4.Te6edf3queryTb4b4b4.Te6edf3tabTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3tabTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3activeTab Tff7b72= Te6edf3tabTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3beforeUnmountTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3GlobalEmitterTb4b4b4.Te6edf3offTb4b4b4(Ta5d6ff"telephone-history-updated"Tb4b4b4, Tff7b72thisTb4b4b4.Te6edf3getHistoryTb4b4b4)Tb4b4b4;
Te6edf3GlobalEmitterTb4b4b4.Te6edf3offTb4b4b4(Ta5d6ff"telephone-history-updated"Tb4b4b4, Tff7b72thisTb4b4b4.Te6edf3getVoicemailsTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3statusIntervalTb4b4b4) Te6edf3clearIntervalTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3statusIntervalTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3historyIntervalTb4b4b4) Te6edf3clearIntervalTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3historyIntervalTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3elapsedTimeIntervalTb4b4b4) Te6edf3clearIntervalTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3elapsedTimeIntervalTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3endedTimeoutTb4b4b4) Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3endedTimeoutTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3stopAudioVisualizerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayer Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3stopWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3methodsTff7b72: Tb4b4b4{
Te6edf3formatDestinationHashTb4b4b4(Te6edf3hashTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3formatDestinationHashTb4b4b4(Te6edf3hashTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3formatBytesTb4b4b4(Te6edf3bytesTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3formatBytesTb4b4b4(Te6edf3bytes Tff7b72|| T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3formatNumberTb4b4b4(Te6edf3valueTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3formatNumberTb4b4b4(Te6edf3value Tff7b72|| T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3formatDateTimeTb4b4b4(Te6edf3timestampTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3convertUnixMillisToLocalDateTimeStringTb4b4b4(Te6edf3timestampTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3formatTimeAgoTb4b4b4(Te6edf3datetimeStringTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3formatTimeAgoTb4b4b4(Te6edf3datetimeStringTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3formatDurationTb4b4b4(Te6edf3secondsTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3formatMinutesSecondsTb4b4b4(Te6edf3secondsTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3capturePeakLevelTb4b4b4(Te6edf3samplesTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3samples Tff7b72|| Te6edf3samplesTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Tb4b4b4) Tff7b72return T79c0ff0Tb4b4b4;
Tff7b72let Te6edf3peak Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3samplesTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3i Tff7b72+= T79c0ff1Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3value Tff7b72= Tffa657MathTb4b4b4.Te6edf3absTb4b4b4(Te6edf3samplesTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3value Tff7b72> Te6edf3peakTb4b4b4) Te6edf3peak Tff7b72= Te6edf3valueTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3peakTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3extractInt16SamplesTb4b4b4(Te6edf3payloadTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3payloadTb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3payload Tff7b72instanceof Tffa657ArrayBufferTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72new Tffa657Int16ArrayTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tffa657ArrayBufferTb4b4b4.Te6edf3isViewTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3byteLengthEven Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3payloadTb4b4b4.Te6edf3byteLength Tff7b72/ T79c0ff2Tb4b4b4) Tff7b72* T79c0ff2Tb4b4b4;
Tff7b72return Tff7b72new Tffa657Int16ArrayTb4b4b4(Te6edf3payloadTb4b4b4.Te6edf3bufferTb4b4b4, Te6edf3payloadTb4b4b4.Te6edf3byteOffsetTb4b4b4, Te6edf3byteLengthEven Tff7b72/ T79c0ff2Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3computeSignalLevelTb4b4b4(Te6edf3samplesTb4b4b4, Te6edf3scale Tff7b72= T79c0ff1Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3samples Tff7b72|| Te6edf3samplesTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Tb4b4b4) Tff7b72return T79c0ff0Tb4b4b4;
Tff7b72let Te6edf3peak Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72let Te6edf3sumSq Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3samplesTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3i Tff7b72+= T79c0ff1Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3value Tff7b72= Tffa657MathTb4b4b4.Te6edf3absTb4b4b4(Te6edf3samplesTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4) Tff7b72/ Te6edf3scaleTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3value Tff7b72> Te6edf3peakTb4b4b4) Te6edf3peak Tff7b72= Te6edf3valueTb4b4b4;
Te6edf3sumSq Tff7b72+= Te6edf3value Tff7b72* Te6edf3valueTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3rms Tff7b72= Tffa657MathTb4b4b4.Te6edf3sqrtTb4b4b4(Te6edf3sumSq Tff7b72/ Te6edf3samplesTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3boosted Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Te6edf3peak Tff7b72* T79c0ff0.8Tb4b4b4, Te6edf3rms Tff7b72* T79c0ff2.4Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3normalizeAudioLevelTb4b4b4(Te6edf3boostedTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3normalizeAudioLevelTb4b4b4(Te6edf3levelTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3levelTb4b4b4)Tb4b4b4) Tff7b72return T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3normalized Tff7b72= Te6edf3level Tff7b72> T79c0ff1 Tff7b72&& Te6edf3level Tff7b72<= T79c0ff100 Tff7b72? Te6edf3level Tff7b72/ T79c0ff100 Tff7b72: Te6edf3levelTb4b4b4;
Tff7b72return Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff0Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3normalizedTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3disableAudioVisualizerTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3visualizerEnabled Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3stopAudioVisualizerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3updateVisualizerFromCallStatsTb4b4b4(Te6edf3newCallTb4b4b4, Te6edf3oldCallTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3newCall Tff7b72|| Te6edf3newCallTb4b4b4.Te6edf3status Tff7b72!== T79c0ff6Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3prevCallTxBytes Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3prevCallRxBytes Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3localAudioTarget Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3remoteAudioTarget Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
T8b949e// Real PCM levels are preferred; this is a fallback when bridge/native
T8b949e// audio telemetry is unavailable but link stats are present.
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioWs Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3useAndroidNativeTelephoneTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3prevCallTxBytes Tff7b72= Tffa657NumberTb4b4b4(Te6edf3newCallTb4b4b4.Te6edf3tx_bytes Tff7b72|| T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3prevCallRxBytes Tff7b72= Tffa657NumberTb4b4b4(Te6edf3newCallTb4b4b4.Te6edf3rx_bytes Tff7b72|| T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3tx Tff7b72= Tffa657NumberTb4b4b4(Te6edf3newCallTb4b4b4.Te6edf3tx_bytes Tff7b72|| T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3rx Tff7b72= Tffa657NumberTb4b4b4(Te6edf3newCallTb4b4b4.Te6edf3rx_bytes Tff7b72|| T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3prevTx Tff7b72= Te6edf3oldCall Tff7b72&& Te6edf3oldCallTb4b4b4.Te6edf3hash Tff7b72=== Te6edf3newCallTb4b4b4.Te6edf3hash Tff7b72? Tff7b72thisTb4b4b4.Te6edf3prevCallTxBytes Tff7b72: Te6edf3txTb4b4b4;
Tff7b72const Te6edf3prevRx Tff7b72= Te6edf3oldCall Tff7b72&& Te6edf3oldCallTb4b4b4.Te6edf3hash Tff7b72=== Te6edf3newCallTb4b4b4.Te6edf3hash Tff7b72? Tff7b72thisTb4b4b4.Te6edf3prevCallRxBytes Tff7b72: Te6edf3rxTb4b4b4;
Tff7b72const Te6edf3txDelta Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3tx Tff7b72- Te6edf3prevTxTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3rxDelta Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3rx Tff7b72- Te6edf3prevRxTb4b4b4)Tb4b4b4;
T8b949e// Convert byte deltas to subtle activity levels with soft cap.
Tff7b72const Te6edf3txLevel Tff7b72= Tff7b72thisTb4b4b4.Te6edf3normalizeAudioLevelTb4b4b4(Tffa657MathTb4b4b4.Te6edf3log10Tb4b4b4(T79c0ff1 Tff7b72+ Te6edf3txDeltaTb4b4b4) Tff7b72/ T79c0ff2.8Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3rxLevel Tff7b72= Tff7b72thisTb4b4b4.Te6edf3normalizeAudioLevelTb4b4b4(Tffa657MathTb4b4b4.Te6edf3log10Tb4b4b4(T79c0ff1 Tff7b72+ Te6edf3rxDeltaTb4b4b4) Tff7b72/ T79c0ff2.8Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3localAudioTarget Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3localAudioTargetTb4b4b4, Te6edf3txLevelTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3remoteAudioTarget Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3remoteAudioTargetTb4b4b4, Te6edf3rxLevelTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3localAudioLevel Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3localAudioLevelTb4b4b4, Tff7b72thisTb4b4b4.Te6edf3localAudioTargetTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3remoteAudioLevel Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3remoteAudioLevelTb4b4b4, Tff7b72thisTb4b4b4.Te6edf3remoteAudioTargetTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3prevCallTxBytes Tff7b72= Te6edf3txTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3prevCallRxBytes Tff7b72= Te6edf3rxTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3resizeAudioVisualizerCanvasTb4b4b4(Te6edf3canvasTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3canvasTb4b4b4) Tff7b72return Tff7b72falseTb4b4b4;
Tff7b72const Te6edf3cssWidth Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff160Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3canvasTb4b4b4.Te6edf3clientWidth Tff7b72|| T79c0ff256Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3cssHeight Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff56Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3canvasTb4b4b4.Te6edf3clientHeight Tff7b72|| T79c0ff72Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3dpr Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff1Tb4b4b4, Tffa657NumberTb4b4b4(Tffa657windowTb4b4b4.Te6edf3devicePixelRatioTb4b4b4) Tff7b72|| T79c0ff1Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3targetWidth Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3cssWidth Tff7b72* Te6edf3dprTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3targetHeight Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3cssHeight Tff7b72* Te6edf3dprTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3canvasTb4b4b4.Te6edf3width Tff7b72!== Te6edf3targetWidth Tff7b72|| Te6edf3canvasTb4b4b4.Te6edf3height Tff7b72!== Te6edf3targetHeightTb4b4b4) Tb4b4b4{
Te6edf3canvasTb4b4b4.Te6edf3width Tff7b72= Te6edf3targetWidthTb4b4b4;
Te6edf3canvasTb4b4b4.Te6edf3height Tff7b72= Te6edf3targetHeightTb4b4b4;
Tb4b4b4}
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3startAudioVisualizerTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3visualizerEnabled Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3visualizerRafIdTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(
Tff7b72typeof Tffa657windowTb4b4b4.Te6edf3requestAnimationFrame Tff7b72!== Ta5d6ff"function" Tff7b72||
Tff7b72typeof Tffa657windowTb4b4b4.Te6edf3cancelAnimationFrame Tff7b72!== Ta5d6ff"function"
Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3disableAudioVisualizerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3canvas Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$refsTb4b4b4.Te6edf3callAudioVisualizerTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3canvas Tff7b72|| Tff7b72typeof Te6edf3canvasTb4b4b4.Te6edf3getContext Tff7b72!== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3resizeAudioVisualizerCanvasTb4b4b4(Te6edf3canvasTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3disableAudioVisualizerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3ctx Tff7b72= Te6edf3canvasTb4b4b4.Te6edf3getContextTb4b4b4(Ta5d6ff"2d"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3ctxTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3disableAudioVisualizerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3loop Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3currentCanvas Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$refsTb4b4b4.Te6edf3callAudioVisualizerTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3currentCanvas Tff7b72|| Tff7b72typeof Te6edf3currentCanvasTb4b4b4.Te6edf3getContext Tff7b72!== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3stopAudioVisualizerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3resizeAudioVisualizerCanvasTb4b4b4(Te6edf3currentCanvasTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3disableAudioVisualizerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3currentCtx Tff7b72= Te6edf3currentCanvasTb4b4b4.Te6edf3getContextTb4b4b4(Ta5d6ff"2d"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3currentCtxTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3disableAudioVisualizerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3width Tff7b72= Te6edf3currentCanvasTb4b4b4.Te6edf3widthTb4b4b4;
Tff7b72const Te6edf3height Tff7b72= Te6edf3currentCanvasTb4b4b4.Te6edf3heightTb4b4b4;
Tff7b72const Te6edf3centerY Tff7b72= Te6edf3height Tff7b72/ T79c0ff2Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3visualizerPhase Tff7b72+= T79c0ff0.065Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3localAudioTarget Tff7b72*= T79c0ff0.985Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3remoteAudioTarget Tff7b72*= T79c0ff0.985Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3localAudioLevel Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3localAudioLevel Tff7b72* T79c0ff0.965Tb4b4b4, Tff7b72thisTb4b4b4.Te6edf3localAudioTargetTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3remoteAudioLevel Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3remoteAudioLevel Tff7b72* T79c0ff0.965Tb4b4b4, Tff7b72thisTb4b4b4.Te6edf3remoteAudioTargetTb4b4b4)Tb4b4b4;
Te6edf3currentCtxTb4b4b4.Te6edf3clearRectTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3widthTb4b4b4, Te6edf3heightTb4b4b4)Tb4b4b4;
Te6edf3currentCtxTb4b4b4.Te6edf3fillStyle Tff7b72= Ta5d6ff"rgba(10, 12, 18, 0.9)"Tb4b4b4;
Te6edf3currentCtxTb4b4b4.Te6edf3fillRectTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3widthTb4b4b4, Te6edf3heightTb4b4b4)Tb4b4b4;
Te6edf3currentCtxTb4b4b4.Te6edf3strokeStyle Tff7b72= Ta5d6ff"rgba(156, 163, 175, 0.22)"Tb4b4b4;
Te6edf3currentCtxTb4b4b4.Te6edf3lineWidth Tff7b72= T79c0ff1Tb4b4b4;
Te6edf3currentCtxTb4b4b4.Te6edf3beginPathTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3currentCtxTb4b4b4.Te6edf3moveToTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3centerYTb4b4b4)Tb4b4b4;
Te6edf3currentCtxTb4b4b4.Te6edf3lineToTb4b4b4(Te6edf3widthTb4b4b4, Te6edf3centerYTb4b4b4)Tb4b4b4;
Te6edf3currentCtxTb4b4b4.Te6edf3strokeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3drawWave Tff7b72= Tb4b4b4(Te6edf3levelTb4b4b4, Te6edf3colorTb4b4b4, Te6edf3phaseOffsetTb4b4b4, Te6edf3directionTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3clampedLevel Tff7b72= Tff7b72thisTb4b4b4.Te6edf3normalizeAudioLevelTb4b4b4(Te6edf3levelTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3clampedLevel Tff7b72< T79c0ff0.003Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3amp Tff7b72= Te6edf3clampedLevel Tff7b72* Tb4b4b4(Te6edf3height Tff7b72* T79c0ff0.4Tb4b4b4)Tb4b4b4;
Te6edf3currentCtxTb4b4b4.Te6edf3beginPathTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3currentCtxTb4b4b4.Te6edf3strokeStyle Tff7b72= Te6edf3colorTb4b4b4;
Te6edf3currentCtxTb4b4b4.Te6edf3lineWidth Tff7b72= T79c0ff2Tb4b4b4;
Tff7b72const Te6edf3step Tff7b72= T79c0ff4Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3x Tff7b72= T79c0ff0Tb4b4b4; Te6edf3x Tff7b72<= Te6edf3widthTb4b4b4; Te6edf3x Tff7b72+= Te6edf3stepTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3t Tff7b72= Tb4b4b4(Te6edf3x Tff7b72/ Te6edf3widthTb4b4b4) Tff7b72* Tffa657MathTb4b4b4.Te6edf3PI Tff7b72* T79c0ff6 Tff7b72+ Tff7b72thisTb4b4b4.Te6edf3visualizerPhase Tff7b72+ Te6edf3phaseOffsetTb4b4b4;
Tff7b72const Te6edf3envelope Tff7b72= T79c0ff0.5 Tff7b72+ T79c0ff0.5 Tff7b72* Tffa657MathTb4b4b4.Te6edf3sinTb4b4b4(Tb4b4b4(Te6edf3x Tff7b72/ Te6edf3widthTb4b4b4) Tff7b72* Tffa657MathTb4b4b4.Te6edf3PITb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3y Tff7b72= Te6edf3centerY Tff7b72+ Te6edf3direction Tff7b72* Tffa657MathTb4b4b4.Te6edf3sinTb4b4b4(Te6edf3tTb4b4b4) Tff7b72* Te6edf3amp Tff7b72* Te6edf3envelopeTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3x Tff7b72=== T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3currentCtxTb4b4b4.Te6edf3moveToTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3currentCtxTb4b4b4.Te6edf3lineToTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Te6edf3currentCtxTb4b4b4.Te6edf3strokeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Te6edf3drawWaveTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3localAudioLevelTb4b4b4, Ta5d6ff"rgba(34, 211, 238, 0.95)"Tb4b4b4, T79c0ff0Tb4b4b4, Tff7b72-T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3drawWaveTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3remoteAudioLevelTb4b4b4, Ta5d6ff"rgba(167, 139, 250, 0.95)"Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3PI Tff7b72/ T79c0ff2Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3visualizerRafId Tff7b72= Tffa657windowTb4b4b4.Te6edf3requestAnimationFrameTb4b4b4(Te6edf3loopTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3visualizerRafId Tff7b72= Tffa657windowTb4b4b4.Te6edf3requestAnimationFrameTb4b4b4(Te6edf3loopTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3stopAudioVisualizerTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3visualizerRafIdTb4b4b4) Tb4b4b4{
Tffa657windowTb4b4b4.Te6edf3cancelAnimationFrameTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3visualizerRafIdTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3visualizerRafId Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3localAudioLevel Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3remoteAudioLevel Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3localAudioTarget Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3remoteAudioTarget Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3isMeshChatXAndroidTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4(
Tffa657windowTb4b4b4.Te6edf3MeshChatXAndroid Tff7b72&&
Tff7b72typeof Tffa657windowTb4b4b4.Te6edf3MeshChatXAndroidTb4b4b4.Te6edf3getPlatform Tff7b72=== Ta5d6ff"function" Tff7b72&&
Tffa657windowTb4b4b4.Te6edf3MeshChatXAndroidTb4b4b4.Te6edf3getPlatformTb4b4b4(Tb4b4b4) Tff7b72=== Ta5d6ff"android"
Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3getMediaDevicesApiTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3mediaDevices Tff7b72= Te6edf3navigatorTff7b72?Tb4b4b4.Te6edf3mediaDevicesTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3mediaDevices Tff7b72|| Tff7b72typeof Te6edf3mediaDevicesTb4b4b4.Te6edf3getUserMedia Tff7b72!== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3mediaDevicesTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3hasEnumerateDevicesApiTb4b4b4(Te6edf3mediaDevicesTb4b4b4) Tb4b4b4{
Tff7b72return Tffa657BooleanTb4b4b4(Te6edf3mediaDevices Tff7b72&& Tff7b72typeof Te6edf3mediaDevicesTb4b4b4.Te6edf3enumerateDevices Tff7b72=== Ta5d6ff"function"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3getAudioContextConstructorTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657windowTb4b4b4.Te6edf3AudioContext Tff7b72|| Tffa657windowTb4b4b4.Te6edf3webkitAudioContext Tff7b72|| Tff7b72nullTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3pickWebAudioMicConstraintsTb4b4b4(Te6edf3mediaDevicesTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3processingHints Tff7b72= Tb4b4b4{
Te6edf3echoCancellationTff7b72: Tff7b72trueTb4b4b4,
Te6edf3noiseSuppressionTff7b72: Tff7b72trueTb4b4b4,
Te6edf3autoGainControlTff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3canEnumerate Tff7b72= Tff7b72thisTb4b4b4.Te6edf3hasEnumerateDevicesApiTb4b4b4(Te6edf3mediaDevicesTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3validIds Tff7b72= Te6edf3canEnumerate
Tff7b72? Tff7b72new Tffa657SetTb4b4b4(
Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioInputDevices Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4)
Tb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3dTb4b4b4) Tb4b4b4=> Te6edf3dTb4b4b4.Te6edf3kind Tff7b72=== Ta5d6ff"audioinput" Tff7b72&& Te6edf3dTb4b4b4.Te6edf3deviceIdTb4b4b4)
Tb4b4b4.Te6edf3mapTb4b4b4(Tb4b4b4(Te6edf3dTb4b4b4) Tb4b4b4=> Te6edf3dTb4b4b4.Te6edf3deviceIdTb4b4b4)
Tb4b4b4)
Tff7b72: Tff7b72new Tffa657SetTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3sid Tff7b72= Tff7b72thisTb4b4b4.Te6edf3selectedAudioInputIdTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3sid Tff7b72=== Ta5d6ff"__meshchat_default_in__"Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{ Te6edf3audioTff7b72: Te6edf3processingHints Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3id Tff7b72= Te6edf3sid Tff7b72&& Te6edf3validIdsTb4b4b4.Te6edf3hasTb4b4b4(Te6edf3sidTb4b4b4) Tff7b72? Te6edf3sid Tff7b72: Tff7b72nullTb4b4b4;
Tff7b72return Te6edf3id Tff7b72? Tb4b4b4{ Te6edf3audioTff7b72: Tb4b4b4{ Tb4b4b4...Te6edf3processingHintsTb4b4b4, Te6edf3deviceIdTff7b72: Tb4b4b4{ Te6edf3exactTff7b72: Te6edf3id Tb4b4b4} Tb4b4b4} Tb4b4b4} Tff7b72: Tb4b4b4{ Te6edf3audioTff7b72: Te6edf3processingHints Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getUserMediaWithMicFallbackTb4b4b4(Te6edf3mediaDevicesTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3constraints Tff7b72= Tff7b72thisTb4b4b4.Te6edf3pickWebAudioMicConstraintsTb4b4b4(Te6edf3mediaDevicesTb4b4b4)Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72return Tff7b72await Te6edf3mediaDevicesTb4b4b4.Te6edf3getUserMediaTb4b4b4(Te6edf3constraintsTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(
Tb4b4b4(Te6edf3eTff7b72?Tb4b4b4.Te6edf3name Tff7b72=== Ta5d6ff"NotFoundError" Tff7b72|| Te6edf3eTff7b72?Tb4b4b4.Te6edf3name Tff7b72=== Ta5d6ff"OverconstrainedError"Tb4b4b4) Tff7b72&&
Te6edf3constraintsTff7b72?Tb4b4b4.Te6edf3audio Tff7b72&&
Tff7b72typeof Te6edf3constraintsTb4b4b4.Te6edf3audio Tff7b72=== Ta5d6ff"object" Tff7b72&&
Te6edf3constraintsTb4b4b4.Te6edf3audioTb4b4b4.Te6edf3deviceId
Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3selectedAudioInputId Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3logWebAudioFailureTb4b4b4(Ta5d6ff"getUserMedia-fallback-wide"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72await Te6edf3mediaDevicesTb4b4b4.Te6edf3getUserMediaTb4b4b4(Tb4b4b4{ Te6edf3audioTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72throw Te6edf3eTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3logWebAudioFailureTb4b4b4(Te6edf3stageTb4b4b4, Te6edf3errorTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3appImage Tff7b72= Tffa657BooleanTb4b4b4(
Tffa657windowTb4b4b4.Te6edf3electron Tff7b72&& Tff7b72typeof Te6edf3navigatorTff7b72?Tb4b4b4.Te6edf3userAgent Tff7b72=== Ta5d6ff"string" Tff7b72&& Te6edf3navigatorTb4b4b4.Te6edf3userAgentTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"AppImage"Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(
Ta5d6ff`Ta5d6ff[CallPage:web-audio] Tffd700${Te6edf3stageTffd700}Ta5d6ff`Tb4b4b4,
Tb4b4b4{
Te6edf3isElectronTff7b72: Tffa657BooleanTb4b4b4(Tffa657windowTb4b4b4.Te6edf3electronTb4b4b4)Tb4b4b4,
Te6edf3isAppImageTff7b72: Te6edf3appImageTb4b4b4,
Te6edf3userAgentTff7b72: Te6edf3navigatorTff7b72?Tb4b4b4.Te6edf3userAgent Tff7b72|| Ta5d6ff"unknown"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3error
Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3disableWebAudioBridgeWithErrorTb4b4b4(Te6edf3errorKeyTb4b4b4, Te6edf3errorTb4b4b4, Te6edf3stage Tff7b72= Ta5d6ff"unknown"Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3logWebAudioFailureTb4b4b4(Te6edf3stageTb4b4b4, Te6edf3errorTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Te6edf3errorKeyTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4.Te6edf3telephone_web_audio_enabled Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3updateConfigTb4b4b4(Tb4b4b4{ Te6edf3telephone_web_audio_enabledTff7b72: Tff7b72false Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3updateErrorTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3logWebAudioFailureTb4b4b4(Ta5d6ff"disable-config-update"Tb4b4b4, Te6edf3updateErrorTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3stopWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3ensureWebAudioTb4b4b4(Te6edf3webAudioStatusTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3webAudioStatusTff7b72?Tb4b4b4.Te6edf3enabledTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3stopWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
T8b949e// Do not start web audio during voicemail
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3activeCallTff7b72?Tb4b4b4.Te6edf3is_voicemailTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3stopWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3activeCall Tff7b72&& Te6edf3webAudioStatusTb4b4b4.Te6edf3enabledTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioFrameMs Tff7b72= Te6edf3webAudioStatusTb4b4b4.Te6edf3frame_ms Tff7b72|| T79c0ff60Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3startWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3stopWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3onToggleWebAudioTb4b4b4(Te6edf3newValTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72const Te6edf3previousValue Tff7b72= Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4.Te6edf3telephone_web_audio_enabledTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4.Te6edf3telephone_web_audio_enabled Tff7b72= Te6edf3newValTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3newVal Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3permitted Tff7b72= Tff7b72await Tff7b72thisTb4b4b4.Te6edf3requestAudioPermissionTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3permittedTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4.Te6edf3telephone_web_audio_enabled Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3updateConfigTb4b4b4(Tb4b4b4{ Te6edf3telephone_web_audio_enabledTff7b72: Tff7b72false Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3updateConfigTb4b4b4(Tb4b4b4{ Te6edf3telephone_web_audio_enabledTff7b72: Te6edf3newVal Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3newValTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4) Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3startWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3stopWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// revert on failure
Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4.Te6edf3telephone_web_audio_enabled Tff7b72= Te6edf3previousValueTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3startWebAudioTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3isMeshChatXAndroidTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3stopWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(
Tff7b72!Tffa657windowTb4b4b4.Te6edf3MeshChatXAndroid Tff7b72||
Tff7b72typeof Tffa657windowTb4b4b4.Te6edf3MeshChatXAndroidTb4b4b4.Te6edf3startTelephoneNativeAudio Tff7b72!== Ta5d6ff"function"
Tb4b4b4) Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3disableWebAudioBridgeWithErrorTb4b4b4(
Ta5d6ff"call.web_audio_not_available"Tb4b4b4,
Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Native audio bridge not linked"Tb4b4b4)Tb4b4b4,
Ta5d6ff"start-android-missing"
Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3telMic Tff7b72= Tffa657windowTb4b4b4.Te6edf3MeshChatXAndroidTb4b4b4.Te6edf3isTelephoneNativeAudioAvailableTb4b4b4;
Tff7b72const Te6edf3micOk Tff7b72=
Tff7b72typeof Te6edf3telMic Tff7b72=== Ta5d6ff"function"
Tff7b72? Te6edf3telMicTb4b4b4(Tb4b4b4)
Tff7b72: Tffa657windowTb4b4b4.Te6edf3MeshChatXAndroidTb4b4b4.Te6edf3isNativePcmAudioAvailableTff7b72?Tb4b4b4.Tb4b4b4(Tb4b4b4) Tff7b72=== Tff7b72trueTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3micOkTb4b4b4) Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3disableWebAudioBridgeWithErrorTb4b4b4(
Ta5d6ff"call.microphone_permission_denied"Tb4b4b4,
Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"RECORD_AUDIO not granted"Tb4b4b4)Tb4b4b4,
Ta5d6ff"start-android-perm"
Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3ret Tff7b72= Tffa657windowTb4b4b4.Te6edf3MeshChatXAndroidTb4b4b4.Te6edf3startTelephoneNativeAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3ret Tff7b72!== Ta5d6ff"ok"Tb4b4b4) Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3disableWebAudioBridgeWithErrorTb4b4b4(
Ta5d6ff"call.web_audio_not_available"Tb4b4b4,
Tff7b72new Tf85149ErrorTb4b4b4(Tffa657StringTb4b4b4(Te6edf3ret Tff7b72|| Ta5d6ff"native start"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Ta5d6ff"start-android"
Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3_bindAndroidNativeTelephoneTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3useAndroidNativeTelephone Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioWs Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3audioWsTb4b4b4.Te6edf3readyState Tff7b72=== Te6edf3WebSocketTb4b4b4.Te6edf3OPENTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioWsTb4b4b4.Te6edf3sendTb4b4b4(Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"attach" Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore
Tb4b4b4}
Tff7b72if Tb4b4b4(
Tff7b72thisTb4b4b4.Te6edf3audioCtx Tff7b72&&
Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3state Tff7b72=== Ta5d6ff"suspended" Tff7b72&&
Tff7b72typeof Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3resume Tff7b72=== Ta5d6ff"function"
Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3resumeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore
Tb4b4b4}
Tb4b4b4}
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioWsTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3stopWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3mediaDevices Tff7b72= Tff7b72thisTb4b4b4.Te6edf3getMediaDevicesApiTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3mediaDevicesTb4b4b4) Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3disableWebAudioBridgeWithErrorTb4b4b4(
Ta5d6ff"call.web_audio_not_available"Tb4b4b4,
Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"navigator.mediaDevices is unavailable"Tb4b4b4)Tb4b4b4,
Ta5d6ff"start-preflight-media-devices"
Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3refreshAudioDevicesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3stream Tff7b72= Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getUserMediaWithMicFallbackTb4b4b4(Te6edf3mediaDevicesTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioStream Tff7b72= Te6edf3streamTb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3refreshAudioDevicesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3AudioContextCtor Tff7b72= Tff7b72thisTb4b4b4.Te6edf3getAudioContextConstructorTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3AudioContextCtorTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"AudioContext is unavailable"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioCtx Tff7b72= Tff7b72new Te6edf3AudioContextCtorTb4b4b4(Tb4b4b4{ Te6edf3sampleRateTff7b72: T79c0ff48000 Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioCtx Tff7b72= Tff7b72new Te6edf3AudioContextCtorTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3state Tff7b72=== Ta5d6ff"suspended" Tff7b72&& Tff7b72typeof Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3resume Tff7b72=== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3resumeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore
Tb4b4b4}
Tb4b4b4}
Tff7b72const Te6edf3source Tff7b72= Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3createMediaStreamSourceTb4b4b4(Te6edf3streamTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioSourceNode Tff7b72= Te6edf3sourceTb4b4b4;
Tff7b72let Te6edf3captureInput Tff7b72= Te6edf3sourceTb4b4b4;
T8b949e// Lightweight mic cleanup stage before PCM capture:
T8b949e// - High-pass removes low rumble/fan hum.
T8b949e// - Compressor smooths sudden peaks and lifts speech intelligibility.
Tff7b72if Tb4b4b4(
Tff7b72typeof Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3createBiquadFilter Tff7b72=== Ta5d6ff"function" Tff7b72&&
Tff7b72typeof Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3createDynamicsCompressor Tff7b72=== Ta5d6ff"function"
Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3highpass Tff7b72= Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3createBiquadFilterTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3highpassTb4b4b4.Te6edf3type Tff7b72= Ta5d6ff"highpass"Tb4b4b4;
Te6edf3highpassTb4b4b4.Te6edf3frequencyTb4b4b4.Te6edf3value Tff7b72= T79c0ff120Tb4b4b4;
Te6edf3highpassTb4b4b4.Te6edf3QTb4b4b4.Te6edf3value Tff7b72= T79c0ff0.707Tb4b4b4;
Tff7b72const Te6edf3compressor Tff7b72= Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3createDynamicsCompressorTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3compressorTb4b4b4.Te6edf3thresholdTb4b4b4.Te6edf3value Tff7b72= Tff7b72-T79c0ff45Tb4b4b4;
Te6edf3compressorTb4b4b4.Te6edf3kneeTb4b4b4.Te6edf3value Tff7b72= T79c0ff30Tb4b4b4;
Te6edf3compressorTb4b4b4.Te6edf3ratioTb4b4b4.Te6edf3value Tff7b72= T79c0ff3Tb4b4b4;
Te6edf3compressorTb4b4b4.Te6edf3attackTb4b4b4.Te6edf3value Tff7b72= T79c0ff0.003Tb4b4b4;
Te6edf3compressorTb4b4b4.Te6edf3releaseTb4b4b4.Te6edf3value Tff7b72= T79c0ff0.25Tb4b4b4;
Te6edf3sourceTb4b4b4.Te6edf3connectTb4b4b4(Te6edf3highpassTb4b4b4)Tb4b4b4;
Te6edf3highpassTb4b4b4.Te6edf3connectTb4b4b4(Te6edf3compressorTb4b4b4)Tb4b4b4;
Te6edf3captureInput Tff7b72= Te6edf3compressorTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioNoiseHighpass Tff7b72= Te6edf3highpassTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioNoiseCompressor Tff7b72= Te6edf3compressorTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3filterErrTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3logWebAudioFailureTb4b4b4(Ta5d6ff"telephone-noise-filter"Tb4b4b4, Te6edf3filterErrTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72const Te6edf3wsProtocol Tff7b72= Tffa657windowTb4b4b4.Te6edf3locationTb4b4b4.Te6edf3protocol Tff7b72=== Ta5d6ff"https:" Tff7b72? Ta5d6ff"wss:" Tff7b72: Ta5d6ff"ws:"Tb4b4b4;
Tff7b72const Te6edf3url Tff7b72= Ta5d6ff`Tffd700${Te6edf3wsProtocolTffd700}Ta5d6ff//Tffd700${Tffa657windowTb4b4b4.Te6edf3locationTb4b4b4.Te6edf3hostTffd700}Ta5d6ff/ws/telephone/audioTa5d6ff`Tb4b4b4;
Tff7b72const Te6edf3sendMicPcmToWs Tff7b72= Tb4b4b4(Te6edf3arrayBufferTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3audioWs Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3audioWsTb4b4b4.Te6edf3readyState Tff7b72!== Te6edf3WebSocketTb4b4b4.Te6edf3OPENTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3arrayBuffer Tff7b72&& Te6edf3arrayBufferTb4b4b4.Te6edf3byteLength Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioWsTb4b4b4.Te6edf3sendTb4b4b4(Te6edf3arrayBufferTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3floatChannelToInt16PcmBuffer Tff7b72= Tb4b4b4(Te6edf3ch0Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3pcm Tff7b72= Tff7b72new Tffa657Int16ArrayTb4b4b4(Te6edf3ch0Tb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3ch0Tb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3i Tff7b72+= T79c0ff1Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3s Tff7b72= Te6edf3ch0Tb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Te6edf3pcmTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Tff7b72-T79c0ff1Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3sTb4b4b4)Tb4b4b4) Tff7b72* T79c0ff0x7fffTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3pcmTb4b4b4.Te6edf3bufferTb4b4b4;
Tb4b4b4}Tb4b4b4;
Tff7b72let Te6edf3micTapNode Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72if Tb4b4b4(
Tffa657globalThisTb4b4b4.Te6edf3isSecureContext Tff7b72!== Tff7b72false Tff7b72&&
Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3audioWorklet Tff7b72&&
Tff7b72typeof Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3audioWorkletTb4b4b4.Te6edf3addModule Tff7b72=== Ta5d6ff"function"
Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3audioWorkletTb4b4b4.Te6edf3addModuleTb4b4b4(Te6edf3telephonePcmCaptureWorkletUrlTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3processor Tff7b72= Tff7b72new Te6edf3AudioWorkletNodeTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4, Ta5d6ff"telephone-pcm-capture"Tb4b4b4, Tb4b4b4{
Te6edf3numberOfInputsTff7b72: T79c0ff1Tb4b4b4,
Te6edf3numberOfOutputsTff7b72: T79c0ff1Tb4b4b4,
Te6edf3channelCountTff7b72: T79c0ff1Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3processorTb4b4b4.Te6edf3portTb4b4b4.Te6edf3onmessage Tff7b72= Tb4b4b4(Te6edf3eventTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3pcmBuffer Tff7b72= Te6edf3eventTb4b4b4.Te6edf3dataTb4b4b4;
Te6edf3sendMicPcmToWsTb4b4b4(Te6edf3pcmBufferTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3samples Tff7b72= Tff7b72thisTb4b4b4.Te6edf3extractInt16SamplesTb4b4b4(Te6edf3pcmBufferTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3samples Tff7b72&& Te6edf3samplesTb4b4b4.Te6edf3length Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3level Tff7b72= Tff7b72thisTb4b4b4.Te6edf3computeSignalLevelTb4b4b4(Te6edf3samplesTb4b4b4, T79c0ff0x7fffTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3localAudioTarget Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3localAudioTargetTb4b4b4, Te6edf3levelTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3localAudioLevel Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3localAudioLevelTb4b4b4, Tff7b72thisTb4b4b4.Te6edf3localAudioTargetTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4;
Te6edf3captureInputTb4b4b4.Te6edf3connectTb4b4b4(Te6edf3processorTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioWorkletNode Tff7b72= Te6edf3processorTb4b4b4;
Te6edf3micTapNode Tff7b72= Te6edf3processorTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3workletErrTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3logWebAudioFailureTb4b4b4(Ta5d6ff"telephone-worklet-add"Tb4b4b4, Te6edf3workletErrTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3micTapNodeTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72typeof Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3createScriptProcessor Tff7b72!== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3disableWebAudioBridgeWithErrorTb4b4b4(
Ta5d6ff"call.web_audio_not_available"Tb4b4b4,
Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"AudioWorklet and ScriptProcessor capture are unavailable"Tb4b4b4)Tb4b4b4,
Ta5d6ff"start-preflight-audio-capture"
Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3scriptNode Tff7b72= Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3createScriptProcessorTb4b4b4(T79c0ff4096Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3scriptNodeTb4b4b4.Te6edf3onaudioprocess Tff7b72= Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3ch0 Tff7b72= Te6edf3eTb4b4b4.Te6edf3inputBufferTb4b4b4.Te6edf3getChannelDataTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3ch0 Tff7b72|| Te6edf3ch0Tb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3level Tff7b72= Tff7b72thisTb4b4b4.Te6edf3computeSignalLevelTb4b4b4(Te6edf3ch0Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3localAudioTarget Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3localAudioTargetTb4b4b4, Te6edf3levelTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3localAudioLevel Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3localAudioLevelTb4b4b4, Tff7b72thisTb4b4b4.Te6edf3localAudioTargetTb4b4b4)Tb4b4b4;
Te6edf3sendMicPcmToWsTb4b4b4(Te6edf3floatChannelToInt16PcmBufferTb4b4b4(Te6edf3ch0Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Te6edf3captureInputTb4b4b4.Te6edf3connectTb4b4b4(Te6edf3scriptNodeTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioProcessor Tff7b72= Te6edf3scriptNodeTb4b4b4;
Te6edf3micTapNode Tff7b72= Te6edf3scriptNodeTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3scriptErrTb4b4b4) Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3disableWebAudioBridgeWithErrorTb4b4b4(
Ta5d6ff"call.web_audio_not_available"Tb4b4b4,
Te6edf3scriptErrTb4b4b4,
Ta5d6ff"start-preflight-script-processor"
Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72const Te6edf3silentGain Tff7b72= Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3createGainTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3silentGainTb4b4b4.Te6edf3gainTb4b4b4.Te6edf3value Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioSilentGain Tff7b72= Te6edf3silentGainTb4b4b4;
Te6edf3micTapNodeTb4b4b4.Te6edf3connectTb4b4b4(Te6edf3silentGainTb4b4b4)Tb4b4b4;
Te6edf3silentGainTb4b4b4.Te6edf3connectTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3destinationTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3ws Tff7b72= Tff7b72new Te6edf3WebSocketTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4;
Te6edf3wsTb4b4b4.Te6edf3binaryType Tff7b72= Ta5d6ff"arraybuffer"Tb4b4b4;
Te6edf3wsTb4b4b4.Te6edf3onopen Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3wsTb4b4b4.Te6edf3sendTb4b4b4(Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"attach" Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Te6edf3wsTb4b4b4.Te6edf3onmessage Tff7b72= Tb4b4b4(Te6edf3eventTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3eventTb4b4b4.Te6edf3data Tff7b72=== Ta5d6ff"string"Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3msg Tff7b72= Tffa657JSONTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3eventTb4b4b4.Te6edf3dataTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3msgTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff"error"Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3errMsg Tff7b72= Tff7b72typeof Te6edf3msgTb4b4b4.Te6edf3message Tff7b72=== Ta5d6ff"string" Tff7b72? Te6edf3msgTb4b4b4.Te6edf3message Tff7b72: Ta5d6ff""Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3errMsgTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"Web audio is disabled in config"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4.Te6edf3telephone_web_audio_enabled Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3stopWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3logWebAudioFailureTb4b4b4(Ta5d6ff"ws-server-error"Tb4b4b4, Tff7b72new Tf85149ErrorTb4b4b4(Te6edf3msgTb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"unknown"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(
Tff7b72thisTb4b4b4.Te6edf3activeCall Tff7b72&&
Tff7b72typeof Te6edf3msgTb4b4b4.Te6edf3message Tff7b72=== Ta5d6ff"string" Tff7b72&&
Te6edf3msgTb4b4b4.Te6edf3messageTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"No active call"Tb4b4b4)
Tb4b4b4) Tb4b4b4{
Tffa657windowTb4b4b4.Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioWs Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3audioWsTb4b4b4.Te6edf3readyState Tff7b72=== Te6edf3WebSocketTb4b4b4.Te6edf3OPENTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioWsTb4b4b4.Te6edf3sendTb4b4b4(Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"attach" Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore
Tb4b4b4}
Tb4b4b4}Tb4b4b4, T79c0ff150Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore non-json
Tb4b4b4}
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3playRemotePcmTb4b4b4(Te6edf3eventTb4b4b4.Te6edf3dataTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Te6edf3wsTb4b4b4.Te6edf3onerror Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3stopWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Te6edf3wsTb4b4b4.Te6edf3onclose Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3stopWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioWs Tff7b72= Te6edf3wsTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3refreshAudioDevicesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3errTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3errorKey Tff7b72=
Te6edf3errTff7b72?Tb4b4b4.Te6edf3name Tff7b72=== Ta5d6ff"NotFoundError" Tff7b72|| Te6edf3errTff7b72?Tb4b4b4.Te6edf3name Tff7b72=== Ta5d6ff"OverconstrainedError"
Tff7b72? Ta5d6ff"call.no_audio_input_found"
Tff7b72: Te6edf3errTff7b72?Tb4b4b4.Te6edf3name Tff7b72=== Ta5d6ff"NotAllowedError"
Tff7b72? Ta5d6ff"call.microphone_permission_denied"
Tff7b72: Ta5d6ff"call.web_audio_not_available"Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3disableWebAudioBridgeWithErrorTb4b4b4(Te6edf3errorKeyTb4b4b4, Te6edf3errTb4b4b4, Ta5d6ff"start-catch"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3requestAudioPermissionTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3isMeshChatXAndroidTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3tel Tff7b72= Tffa657windowTb4b4b4.Te6edf3MeshChatXAndroidTff7b72?Tb4b4b4.Te6edf3isTelephoneNativeAudioAvailableTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3tel Tff7b72=== Ta5d6ff"function" Tff7b72&& Te6edf3telTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tffa657windowTb4b4b4.Te6edf3MeshChatXAndroidTff7b72?Tb4b4b4.Te6edf3isNativePcmAudioAvailableTff7b72?Tb4b4b4.Tb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72const Te6edf3mediaDevices Tff7b72= Tff7b72thisTb4b4b4.Te6edf3getMediaDevicesApiTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3mediaDevicesTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"navigator.mediaDevices is unavailable"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3hasEnumerateDevicesApiTb4b4b4(Te6edf3mediaDevicesTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3devices Tff7b72= Tff7b72await Te6edf3mediaDevicesTb4b4b4.Te6edf3enumerateDevicesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3hasAudioInput Tff7b72= Te6edf3devicesTb4b4b4.Te6edf3someTb4b4b4(Tb4b4b4(Te6edf3dTb4b4b4) Tb4b4b4=> Te6edf3dTb4b4b4.Te6edf3kind Tff7b72=== Ta5d6ff"audioinput"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3devicesTb4b4b4.Te6edf3length Tff7b72> T79c0ff0 Tff7b72&& Tff7b72!Te6edf3hasAudioInputTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.no_audio_input_found"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3enumErrTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3logWebAudioFailureTb4b4b4(Ta5d6ff"enumerate-devices-preflight"Tb4b4b4, Te6edf3enumErrTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3refreshAudioDevicesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3stream Tff7b72= Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getUserMediaWithMicFallbackTb4b4b4(Te6edf3mediaDevicesTb4b4b4)Tb4b4b4;
Te6edf3streamTb4b4b4.Te6edf3getTracksTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3forEachTb4b4b4(Tb4b4b4(Te6edf3tTb4b4b4) Tb4b4b4=> Te6edf3tTb4b4b4.Te6edf3stopTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3refreshAudioDevicesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3logWebAudioFailureTb4b4b4(Ta5d6ff"request-permission"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3errorKey Tff7b72=
Te6edf3eTff7b72?Tb4b4b4.Te6edf3name Tff7b72=== Ta5d6ff"NotFoundError" Tff7b72|| Te6edf3eTff7b72?Tb4b4b4.Te6edf3name Tff7b72=== Ta5d6ff"OverconstrainedError"
Tff7b72? Ta5d6ff"call.no_audio_input_found"
Tff7b72: Te6edf3eTff7b72?Tb4b4b4.Te6edf3name Tff7b72=== Ta5d6ff"NotAllowedError"
Tff7b72? Ta5d6ff"call.microphone_permission_denied"
Tff7b72: Ta5d6ff"call.web_audio_not_available"Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Te6edf3errorKeyTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3refreshAudioDevicesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3defaultIn Tff7b72= Tb4b4b4{
Te6edf3deviceIdTff7b72: Ta5d6ff"__meshchat_default_in__"Tb4b4b4,
Te6edf3kindTff7b72: Ta5d6ff"audioinput"Tb4b4b4,
Te6edf3labelTff7b72: Ta5d6ff"Default"Tb4b4b4,
Te6edf3groupIdTff7b72: Ta5d6ff""Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3defaultOut Tff7b72= Tb4b4b4{
Te6edf3deviceIdTff7b72: Ta5d6ff"__meshchat_default_out__"Tb4b4b4,
Te6edf3kindTff7b72: Ta5d6ff"audiooutput"Tb4b4b4,
Te6edf3labelTff7b72: Ta5d6ff"Default"Tb4b4b4,
Te6edf3groupIdTff7b72: Ta5d6ff""Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3mediaDevices Tff7b72= Tff7b72thisTb4b4b4.Te6edf3getMediaDevicesApiTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3mediaDevicesTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioInputDevices Tff7b72= Tb4b4b4[Te6edf3defaultInTb4b4b4]Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioOutputDevices Tff7b72= Tb4b4b4[Te6edf3defaultOutTb4b4b4]Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3hasEnumerateDevicesApiTb4b4b4(Te6edf3mediaDevicesTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioInputDevices Tff7b72= Tb4b4b4[Te6edf3defaultInTb4b4b4]Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioOutputDevices Tff7b72= Tb4b4b4[Te6edf3defaultOutTb4b4b4]Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3devices Tff7b72= Tff7b72await Te6edf3mediaDevicesTb4b4b4.Te6edf3enumerateDevicesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72let Te6edf3inputs Tff7b72= Te6edf3devicesTb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3dTb4b4b4) Tb4b4b4=> Te6edf3dTb4b4b4.Te6edf3kind Tff7b72=== Ta5d6ff"audioinput"Tb4b4b4)Tb4b4b4;
Tff7b72let Te6edf3outputs Tff7b72= Te6edf3devicesTb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3dTb4b4b4) Tb4b4b4=> Te6edf3dTb4b4b4.Te6edf3kind Tff7b72=== Ta5d6ff"audiooutput"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3inputsTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0 Tff7b72|| Te6edf3inputsTb4b4b4.Te6edf3everyTb4b4b4(Tb4b4b4(Te6edf3dTb4b4b4) Tb4b4b4=> Tff7b72!Te6edf3dTb4b4b4.Te6edf3deviceId Tff7b72|| Tffa657StringTb4b4b4(Te6edf3dTb4b4b4.Te6edf3deviceIdTb4b4b4)Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4) Tff7b72=== Ta5d6ff""Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3inputs Tff7b72= Tb4b4b4[Te6edf3defaultInTb4b4b4]Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3outputsTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0 Tff7b72|| Te6edf3outputsTb4b4b4.Te6edf3everyTb4b4b4(Tb4b4b4(Te6edf3dTb4b4b4) Tb4b4b4=> Tff7b72!Te6edf3dTb4b4b4.Te6edf3deviceId Tff7b72|| Tffa657StringTb4b4b4(Te6edf3dTb4b4b4.Te6edf3deviceIdTb4b4b4)Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4) Tff7b72=== Ta5d6ff""Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3outputs Tff7b72= Tb4b4b4[Te6edf3defaultOutTb4b4b4]Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3audioInputDevices Tff7b72= Te6edf3inputsTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioOutputDevices Tff7b72= Te6edf3outputsTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3selectedAudioInputId Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3audioInputDevicesTb4b4b4.Te6edf3lengthTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3selectedAudioInputId Tff7b72= Tff7b72thisTb4b4b4.Te6edf3audioInputDevicesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3deviceIdTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3selectedAudioOutputId Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3audioOutputDevicesTb4b4b4.Te6edf3lengthTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3selectedAudioOutputId Tff7b72= Tff7b72thisTb4b4b4.Te6edf3audioOutputDevicesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3deviceIdTb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3logWebAudioFailureTb4b4b4(Ta5d6ff"refresh-devices"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioInputDevices Tff7b72= Tb4b4b4[Te6edf3defaultInTb4b4b4]Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioOutputDevices Tff7b72= Tb4b4b4[Te6edf3defaultOutTb4b4b4]Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3playRemotePcmTb4b4b4(Te6edf3arrayBufferTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3audioCtx Tff7b72|| Tff7b72!Te6edf3arrayBufferTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3pcm Tff7b72= Tff7b72thisTb4b4b4.Te6edf3extractInt16SamplesTb4b4b4(Te6edf3arrayBufferTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3pcmTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3pcmTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72const Te6edf3remoteLevel Tff7b72= Tff7b72thisTb4b4b4.Te6edf3computeSignalLevelTb4b4b4(Te6edf3pcmTb4b4b4, T79c0ff0x7fffTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3remoteAudioTarget Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3remoteAudioTargetTb4b4b4, Te6edf3remoteLevelTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3remoteAudioLevel Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3remoteAudioLevelTb4b4b4, Tff7b72thisTb4b4b4.Te6edf3remoteAudioTargetTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3floatBuf Tff7b72= Tff7b72new Tffa657Float32ArrayTb4b4b4(Te6edf3pcmTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3pcmTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3i Tff7b72+= T79c0ff1Tb4b4b4) Tb4b4b4{
Te6edf3floatBufTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3pcmTb4b4b4[Te6edf3iTb4b4b4] Tff7b72/ T79c0ff0x7fffTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3audioBuffer Tff7b72= Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3createBufferTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3floatBufTb4b4b4.Te6edf3lengthTb4b4b4, T79c0ff48000Tb4b4b4)Tb4b4b4;
Te6edf3audioBufferTb4b4b4.Te6edf3copyToChannelTb4b4b4(Te6edf3floatBufTb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3bufferSource Tff7b72= Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3createBufferSourceTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3bufferSourceTb4b4b4.Te6edf3buffer Tff7b72= Te6edf3audioBufferTb4b4b4;
Tff7b72const Te6edf3sinkId Tff7b72= Tff7b72thisTb4b4b4.Te6edf3selectedAudioOutputIdTb4b4b4;
Tff7b72const Te6edf3useSetSinkId Tff7b72=
Te6edf3sinkId Tff7b72&& Te6edf3sinkId Tff7b72!== Ta5d6ff"__meshchat_default_out__" Tff7b72&& Ta5d6ff"setSinkId" Tff7b72in Te6edf3HTMLMediaElementTb4b4b4.Te6edf3prototypeTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3useSetSinkIdTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3remoteAudioElTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3remoteAudioEl Tff7b72= Tff7b72new Te6edf3AudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3remoteAudioElTb4b4b4.Te6edf3autoplay Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3dest Tff7b72= Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3createMediaStreamDestinationTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3bufferSourceTb4b4b4.Te6edf3connectTb4b4b4(Te6edf3destTb4b4b4)Tb4b4b4;
Te6edf3bufferSourceTb4b4b4.Te6edf3startTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3remoteAudioElTb4b4b4.Te6edf3srcObject Tff7b72= Te6edf3destTb4b4b4.Te6edf3streamTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3remoteAudioElTb4b4b4.Te6edf3setSinkIdTb4b4b4(Te6edf3sinkIdTb4b4b4)Tb4b4b4.Tff7b72catchTb4b4b4(Tb4b4b4(Te6edf3errTb4b4b4) Tb4b4b4=> Te6edf3consoleTb4b4b4.Te6edf3warnTb4b4b4(Ta5d6ff"setSinkId failed"Tb4b4b4, Te6edf3errTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3bufferSourceTb4b4b4.Te6edf3connectTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3destinationTb4b4b4)Tb4b4b4;
Te6edf3bufferSourceTb4b4b4.Te6edf3startTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3_bindAndroidNativeTelephoneTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3_unbindAndroidNativeTelephoneTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3androidNativeTelephoneListener Tff7b72= Tb4b4b4(Te6edf3evTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3d Tff7b72= Te6edf3ev Tff7b72&& Te6edf3evTb4b4b4.Te6edf3detailTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3d Tff7b72&& Te6edf3dTb4b4b4.Te6edf3kind Tff7b72=== Ta5d6ff"levels"Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3localAudioTarget Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3localAudioTargetTb4b4b4, Tff7b72thisTb4b4b4.Te6edf3normalizeAudioLevelTb4b4b4(Te6edf3dTb4b4b4.Te6edf3tx_levelTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3remoteAudioTarget Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3remoteAudioTargetTb4b4b4, Tff7b72thisTb4b4b4.Te6edf3normalizeAudioLevelTb4b4b4(Te6edf3dTb4b4b4.Te6edf3rx_levelTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3localAudioLevel Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3localAudioLevelTb4b4b4, Tff7b72thisTb4b4b4.Te6edf3localAudioTargetTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3remoteAudioLevel Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3remoteAudioLevelTb4b4b4, Tff7b72thisTb4b4b4.Te6edf3remoteAudioTargetTb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3d Tff7b72&& Te6edf3dTb4b4b4.Te6edf3kind Tff7b72=== Ta5d6ff"error" Tff7b72&& Te6edf3dTb4b4b4.Te6edf3detailTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3logWebAudioFailureTb4b4b4(Ta5d6ff"android-native"Tb4b4b4, Tff7b72new Tf85149ErrorTb4b4b4(Tffa657StringTb4b4b4(Te6edf3dTb4b4b4.Te6edf3sub Tff7b72|| Te6edf3dTb4b4b4.Te6edf3detail Tff7b72|| Ta5d6ff"error"Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4;
Tffa657windowTb4b4b4.Te6edf3addEventListenerTb4b4b4(Ta5d6ff"meshchatx-native-telephone-audio"Tb4b4b4, Tff7b72thisTb4b4b4.Te6edf3androidNativeTelephoneListenerTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3_unbindAndroidNativeTelephoneTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3androidNativeTelephoneListenerTb4b4b4) Tb4b4b4{
Tffa657windowTb4b4b4.Te6edf3removeEventListenerTb4b4b4(Ta5d6ff"meshchatx-native-telephone-audio"Tb4b4b4, Tff7b72thisTb4b4b4.Te6edf3androidNativeTelephoneListenerTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3androidNativeTelephoneListener Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3stopWebAudioTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3useAndroidNativeTelephoneTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3_unbindAndroidNativeTelephoneTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3useAndroidNativeTelephone Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Tffa657windowTb4b4b4.Te6edf3MeshChatXAndroidTff7b72?Tb4b4b4.Te6edf3stopTelephoneNativeAudioTb4b4b4) Tb4b4b4{
Tffa657windowTb4b4b4.Te6edf3MeshChatXAndroidTb4b4b4.Te6edf3stopTelephoneNativeAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3logWebAudioFailureTb4b4b4(Ta5d6ff"android-native-stop"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72const Te6edf3ws Tff7b72= Tff7b72thisTb4b4b4.Te6edf3audioWsTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioWs Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3wsTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3wsTb4b4b4.Te6edf3onopen Tff7b72= Tff7b72nullTb4b4b4;
Te6edf3wsTb4b4b4.Te6edf3onmessage Tff7b72= Tff7b72nullTb4b4b4;
Te6edf3wsTb4b4b4.Te6edf3onerror Tff7b72= Tff7b72nullTb4b4b4;
Te6edf3wsTb4b4b4.Te6edf3onclose Tff7b72= Tff7b72nullTb4b4b4;
Te6edf3wsTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioSourceNodeTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioSourceNodeTb4b4b4.Te6edf3disconnectTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3audioSourceNode Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioNoiseHighpassTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioNoiseHighpassTb4b4b4.Te6edf3disconnectTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3audioNoiseHighpass Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioNoiseCompressorTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioNoiseCompressorTb4b4b4.Te6edf3disconnectTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3audioNoiseCompressor Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioProcessorTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioProcessorTb4b4b4.Te6edf3disconnectTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3audioProcessor Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioWorkletNodeTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioWorkletNodeTb4b4b4.Te6edf3portTb4b4b4.Te6edf3onmessage Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioWorkletNodeTb4b4b4.Te6edf3disconnectTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3audioWorkletNode Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioStreamTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioStreamTb4b4b4.Te6edf3getTracksTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3forEachTb4b4b4(Tb4b4b4(Te6edf3tTb4b4b4) Tb4b4b4=> Te6edf3tTb4b4b4.Te6edf3stopTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioStream Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3remoteAudioElTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3remoteAudioElTb4b4b4.Te6edf3srcObject Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3remoteAudioEl Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioSilentGainTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioSilentGainTb4b4b4.Te6edf3disconnectTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3audioSilentGain Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioCtx Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3state Tff7b72!== Ta5d6ff"closed"Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioCtxTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)Tb4b4b4.Tff7b72catchTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
T8b949e// ignore
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3audioCtx Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getConfigTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/config"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3config Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3configTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3updateConfigTb4b4b4(Te6edf3configTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3patchTb4b4b4(Ta5d6ff"/api/v1/config"Tb4b4b4, Te6edf3configTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3responseTb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3configTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3config Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3configTb4b4b4;
Tb4b4b4}
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.settings_saved"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_save_settings"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getAudioProfilesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/audio-profiles"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioProfiles Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3audio_profilesTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3selectedAudioProfileId Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3default_audio_profile_idTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getStatusTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/status"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3oldCall Tff7b72= Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4;
Tff7b72const Te6edf3newCall Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3active_callTb4b4b4;
T8b949e// Sync local mute state from backend
Tff7b72if Tb4b4b4(Te6edf3newCallTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3oldCall Tff7b72|| Te6edf3newCallTb4b4b4.Te6edf3hash Tff7b72!== Te6edf3oldCallTb4b4b4.Te6edf3hashTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3localMicMuted Tff7b72= Te6edf3newCallTb4b4b4.Te6edf3is_mic_mutedTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3localSpeakerMuted Tff7b72= Te6edf3newCallTb4b4b4.Te6edf3is_speaker_mutedTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3activeCall Tff7b72= Te6edf3newCallTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3initiationStatus Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3initiation_statusTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3initiationTargetHash Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3initiation_target_hashTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3initiationTargetName Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3initiation_target_nameTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3activeCallTff7b72?Tb4b4b4.Te6edf3is_voicemailTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3wasVoicemail Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3voicemailTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3unreadVoicemailsCount Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3voicemailTb4b4b4.Te6edf3unread_countTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3web_audioTb4b4b4) Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3ensureWebAudioTb4b4b4(Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3web_audioTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3hydrateContactVisualsTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e// If call just ended, refresh history and show ended state
Tff7b72if Tb4b4b4(Te6edf3oldCall Tff7b72!= Tff7b72null Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3activeCall Tff7b72== Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getHistoryTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getVoicemailsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3lastCall Tff7b72= Te6edf3oldCallTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isCallEnded Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3endedTimeoutTb4b4b4) Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3endedTimeoutTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3endedTimeout Tff7b72= Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isCallEnded Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3lastCall Tff7b72= Tff7b72nullTb4b4b4;
T8b949e// Close window if we are in a popout
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$routeTb4b4b4.Te6edf3metaTb4b4b4.Te6edf3isPopoutTb4b4b4) Tb4b4b4{
Tffa657windowTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4, T79c0ff5000Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3activeCall Tff7b72!= Tff7b72nullTb4b4b4) Tb4b4b4{
T8b949e// if a new call starts, clear ended state
Tff7b72thisTb4b4b4.Te6edf3isCallEnded Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3wasDeclined Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3wasVoicemail Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3lastCall Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3endedTimeoutTb4b4b4) Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3endedTimeoutTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3endedTimeoutTb4b4b4) Tb4b4b4{
T8b949e// If no call and no ended state timeout active, ensure everything is reset
Tff7b72thisTb4b4b4.Te6edf3isCallEnded Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3wasDeclined Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3wasVoicemail Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3lastCall Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3addContactFromHistoryTb4b4b4(Te6edf3entryTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3editingContact Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3contactForm Tff7b72= Tb4b4b4{
Te6edf3nameTff7b72: Te6edf3entryTb4b4b4.Te6edf3remote_identity_name Tff7b72|| Ta5d6ff""Tb4b4b4,
Te6edf3remote_identity_hashTff7b72:
Te6edf3entryTb4b4b4.Te6edf3remote_telephony_hash Tff7b72|| Te6edf3entryTb4b4b4.Te6edf3remote_destination_hash Tff7b72|| Te6edf3entryTb4b4b4.Te6edf3remote_identity_hashTb4b4b4,
Te6edf3preferred_ringtone_idTff7b72: Tff7b72nullTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isContactModalOpen Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3openMessageFromHistoryTb4b4b4(Te6edf3entryTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3hash Tff7b72= Te6edf3entryTb4b4b4.Te6edf3remote_destination_hash Tff7b72|| Te6edf3entryTb4b4b4.Te6edf3remote_identity_hashTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3hashTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3$routerTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{ Te6edf3nameTff7b72: Ta5d6ff"messages"Tb4b4b4, Te6edf3paramsTff7b72: Tb4b4b4{ Te6edf3destinationHashTff7b72: Te6edf3hash Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getHistoryTb4b4b4(Te6edf3loadMore Tff7b72= Tff7b72falseTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3loadMoreTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3callHistoryOffset Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4(
Ta5d6ff`Ta5d6ff/api/v1/telephone/history?limit=Tffd700${Tff7b72thisTb4b4b4.Te6edf3callHistoryLimitTffd700}Ta5d6ff&offset=Tffd700${Tff7b72thisTb4b4b4.Te6edf3callHistoryOffsetTffd700}Tffd700${
Tff7b72thisTb4b4b4.Te6edf3callHistorySearch Tff7b72? Ta5d6ff`Ta5d6ff&search=Tffd700${Tffa657encodeURIComponentTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3callHistorySearchTb4b4b4)Tffd700}Ta5d6ff` Tff7b72: Ta5d6ff""
Tffd700}Ta5d6ff`
Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3newItems Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3call_history Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3loadMoreTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3callHistory Tff7b72= Tb4b4b4[Tb4b4b4...Tff7b72thisTb4b4b4.Te6edf3callHistoryTb4b4b4, Tb4b4b4...Te6edf3newItemsTb4b4b4]Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3callHistory Tff7b72= Te6edf3newItemsTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3hasMoreCallHistory Tff7b72= Te6edf3newItemsTb4b4b4.Te6edf3length Tff7b72=== Tff7b72thisTb4b4b4.Te6edf3callHistoryLimitTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3hydrateContactVisualsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3loadMoreCallHistoryTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3callHistoryOffset Tff7b72+= Tff7b72thisTb4b4b4.Te6edf3callHistoryLimitTb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getHistoryTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3onCallHistorySearchInputTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4) Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeout Tff7b72= Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getHistoryTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff500Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getDiscoveryTb4b4b4(Te6edf3loadMore Tff7b72= Tff7b72falseTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3loadMoreTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3discoveryOffset Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3hasMoreDiscovery Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/announces"Tb4b4b4, Tb4b4b4{
Te6edf3paramsTff7b72: Tb4b4b4{
Te6edf3aspectTff7b72: Ta5d6ff"lxst.telephony"Tb4b4b4,
Te6edf3limitTff7b72: Tff7b72thisTb4b4b4.Te6edf3discoveryLimitTb4b4b4,
Te6edf3offsetTff7b72: Tff7b72thisTb4b4b4.Te6edf3discoveryOffsetTb4b4b4,
Te6edf3searchTff7b72: Tff7b72thisTb4b4b4.Te6edf3discoverySearchTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3newItems Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3announces Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3totalDiscoveryCount Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3total_count Tff7b72|| T79c0ff0Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3loadMoreTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3discoveryAnnounces Tff7b72= Tb4b4b4[Tb4b4b4...Tff7b72thisTb4b4b4.Te6edf3discoveryAnnouncesTb4b4b4, Tb4b4b4...Te6edf3newItemsTb4b4b4]Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3discoveryAnnounces Tff7b72= Te6edf3newItemsTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3hasMoreDiscovery Tff7b72= Te6edf3newItemsTb4b4b4.Te6edf3length Tff7b72=== Tff7b72thisTb4b4b4.Te6edf3discoveryLimitTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3loadMoreDiscoveryTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3discoveryOffset Tff7b72+= Tff7b72thisTb4b4b4.Te6edf3discoveryLimitTb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getDiscoveryTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3onDiscoverySearchInputTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4) Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeout Tff7b72= Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getDiscoveryTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff500Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3toggleDoNotDisturbTb4b4b4(Te6edf3valueTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3patchTb4b4b4(Ta5d6ff"/api/v1/config"Tb4b4b4, Tb4b4b4{
Te6edf3do_not_disturb_enabledTff7b72: Te6edf3valueTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4.Te6edf3do_not_disturb_enabled Tff7b72= Te6edf3valueTb4b4b4;
Tb4b4b4}
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Te6edf3value Tff7b72? Ta5d6ff"Do Not Disturb enabled" Tff7b72: Ta5d6ff"Do Not Disturb disabled"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_update_dnd"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3toggleAllowCallsFromContactsOnlyTb4b4b4(Te6edf3valueTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3patchTb4b4b4(Ta5d6ff"/api/v1/config"Tb4b4b4, Tb4b4b4{
Te6edf3telephone_allow_calls_from_contacts_onlyTff7b72: Te6edf3valueTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4.Te6edf3telephone_allow_calls_from_contacts_only Tff7b72= Te6edf3valueTb4b4b4;
Tb4b4b4}
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Te6edf3value Tff7b72? Ta5d6ff"Calls limited to contacts" Tff7b72: Ta5d6ff"Calls allowed from everyone"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_update_call_settings"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3toggleTelephoneAnnounceEnabledTb4b4b4(Te6edf3valueTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3patchTb4b4b4(Ta5d6ff"/api/v1/config"Tb4b4b4, Tb4b4b4{
Te6edf3telephone_announce_enabledTff7b72: Te6edf3valueTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4.Te6edf3telephone_announce_enabled Tff7b72= Te6edf3valueTb4b4b4;
Tb4b4b4}
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Te6edf3value Tff7b72? Ta5d6ff"Telephone announces enabled" Tff7b72: Ta5d6ff"Telephone announces disabled"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_update_call_settings"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3toggleCallRecordingTb4b4b4(Te6edf3valueTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3patchTb4b4b4(Ta5d6ff"/api/v1/config"Tb4b4b4, Tb4b4b4{
Te6edf3call_recording_enabledTff7b72: Te6edf3valueTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4.Te6edf3call_recording_enabled Tff7b72= Te6edf3valueTb4b4b4;
Tb4b4b4}
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Te6edf3value Tff7b72? Ta5d6ff"Call recording enabled" Tff7b72: Ta5d6ff"Call recording disabled"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_update_recording_status"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3clearHistoryTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3confirmTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"common.delete_confirm"Tb4b4b4)Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff"/api/v1/telephone/history"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3callHistory Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.call_history_cleared"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_clear_call_history"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3blockIdentityTb4b4b4(Te6edf3hashTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3confirmTb4b4b4(Ta5d6ff`Ta5d6ffAre you sure you want to banish this identity?Ta5d6ff`Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/blocked-destinations"Tb4b4b4, Tb4b4b4{
Te6edf3destination_hashTff7b72: Te6edf3hashTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.identity_banished"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getHistoryTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_banish_identity"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getVoicemailStatusTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemail/status"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3voicemailStatus Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getRingtoneStatusTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/ringtones/status"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3ringtoneStatus Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getRingtonesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/ringtones"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3ringtones Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to get ringtones:"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3deleteRingtoneTb4b4b4(Te6edf3ringtoneTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3confirmTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"common.delete_confirm"Tb4b4b4)Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/ringtones/Tffd700${Te6edf3ringtoneTb4b4b4.Te6edf3idTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.ringtone_deleted"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getRingtonesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getRingtoneStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_delete_ringtone"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3setPrimaryRingtoneTb4b4b4(Te6edf3ringtoneTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3patchTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/ringtones/Tffd700${Te6edf3ringtoneTb4b4b4.Te6edf3idTffd700}Ta5d6ff`Tb4b4b4, Tb4b4b4{
Te6edf3is_primaryTff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.primary_ringtone_set"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getRingtonesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getRingtoneStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_set_primary_ringtone"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3startEditingRingtoneTb4b4b4(Te6edf3ringtoneTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3editingRingtoneId Tff7b72= Te6edf3ringtoneTb4b4b4.Te6edf3idTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3editingRingtoneName Tff7b72= Te6edf3ringtoneTb4b4b4.Te6edf3display_nameTb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3saveRingtoneNameTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3patchTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/ringtones/Tffd700${Tff7b72thisTb4b4b4.Te6edf3editingRingtoneIdTffd700}Ta5d6ff`Tb4b4b4, Tb4b4b4{
Te6edf3display_nameTff7b72: Tff7b72thisTb4b4b4.Te6edf3editingRingtoneNameTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3editingRingtoneId Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getRingtonesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_update_ringtone_name"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3uploadRingtoneTb4b4b4(Te6edf3eventTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3file Tff7b72= Te6edf3eventTb4b4b4.Te6edf3targetTb4b4b4.Te6edf3filesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3fileTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isUploadingRingtone Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72const Te6edf3formData Tff7b72= Tff7b72new Te6edf3FormDataTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3formDataTb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff"file"Tb4b4b4, Te6edf3fileTb4b4b4)Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/telephone/ringtones/upload"Tb4b4b4, Te6edf3formDataTb4b4b4, Tb4b4b4{
Te6edf3headersTff7b72: Tb4b4b4{
Ta5d6ff"Content-Type"Tff7b72: Ta5d6ff"multipart/form-data"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.ringtone_uploaded_successfully"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getRingtonesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getRingtoneStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3message Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_upload_ringtone"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isUploadingRingtone Tff7b72= Tff7b72falseTb4b4b4;
Te6edf3eventTb4b4b4.Te6edf3targetTb4b4b4.Te6edf3value Tff7b72= Ta5d6ff""Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3playRingtonePreviewTb4b4b4(Te6edf3ringtoneTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3isPlayingRingtone Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3playingRingtoneId Tff7b72=== Te6edf3ringtoneTb4b4b4.Te6edf3idTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isPlayingRingtone Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3playingRingtoneId Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3playingRingtoneId Tff7b72= Te6edf3ringtoneTb4b4b4.Te6edf3idTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayer Tff7b72= Tff7b72new Te6edf3AudioTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/ringtones/Tffd700${Te6edf3ringtoneTb4b4b4.Te6edf3idTffd700}Ta5d6ff/audioTa5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3configTff7b72?Tb4b4b4.Te6edf3ringtone_volume Tff7b72!== Tff7b72undefinedTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3volume Tff7b72= Tff7b72thisTb4b4b4.Te6edf3configTb4b4b4.Te6edf3ringtone_volume Tff7b72/ T79c0ff100.0Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3onended Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isPlayingRingtone Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3playingRingtoneId Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3playTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isPlayingRingtone Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_play_ringtone"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3openRingtoneEditorTb4b4b4(Te6edf3ringtoneTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3editingRingtoneForAudio Tff7b72= Te6edf3ringtoneTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isRingtoneEditorOpen Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3onRingtoneSavedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getRingtonesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getRingtoneStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getVoicemailsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemails"Tb4b4b4, Tb4b4b4{
Te6edf3paramsTff7b72: Tb4b4b4{ Te6edf3searchTff7b72: Tff7b72thisTb4b4b4.Te6edf3voicemailSearch Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3voicemails Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3voicemails Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3unreadVoicemailsCount Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3unread_count Tff7b72|| T79c0ff0Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3onVoicemailSearchInputTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4) Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeout Tff7b72= Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getVoicemailsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff300Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3getContactByHashTb4b4b4(Te6edf3hashTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3hashTb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3contactsTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3cTb4b4b4) Tb4b4b4=> Te6edf3cTb4b4b4.Te6edf3remote_identity_hash Tff7b72=== Te6edf3hashTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getContactsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/contacts"Tb4b4b4, Tb4b4b4{
Te6edf3paramsTff7b72: Tb4b4b4{ Te6edf3searchTff7b72: Tff7b72thisTb4b4b4.Te6edf3contactsSearch Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3contacts Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3contacts Tff7b72|| Tb4b4b4(Tffa657ArrayTb4b4b4.Te6edf3isArrayTb4b4b4(Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4) Tff7b72? Te6edf3responseTb4b4b4.Te6edf3data Tff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3hydrateContactVisualsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3onContactsSearchInputTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4) Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeout Tff7b72= Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getContactsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff300Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3hydrateContactVisualsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3map Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3contactsTb4b4b4.Te6edf3forEachTb4b4b4(Tb4b4b4(Te6edf3cTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3cTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72const Te6edf3image Tff7b72= Te6edf3cTb4b4b4.Te6edf3custom_imageTb4b4b4;
Tff7b72const Te6edf3keys Tff7b72= Tb4b4b4[Te6edf3cTb4b4b4.Te6edf3remote_identity_hashTb4b4b4, Te6edf3cTb4b4b4.Te6edf3lxmf_addressTb4b4b4, Te6edf3cTb4b4b4.Te6edf3lxst_addressTb4b4b4]Tb4b4b4.Te6edf3filterTb4b4b4(Tffa657BooleanTb4b4b4)Tb4b4b4;
Te6edf3keysTb4b4b4.Te6edf3forEachTb4b4b4(Tb4b4b4(Te6edf3kTb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3mapTb4b4b4[Te6edf3kTb4b4b4] Tff7b72= Te6edf3imageTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3applyImage Tff7b72= Tb4b4b4(Te6edf3targetTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3targetTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72const Te6edf3key Tff7b72=
Te6edf3targetTb4b4b4.Te6edf3remote_identity_hash Tff7b72|| Te6edf3targetTb4b4b4.Te6edf3remote_destination_hash Tff7b72|| Te6edf3targetTb4b4b4.Te6edf3remote_telephony_hashTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3key Tff7b72&& Te6edf3mapTb4b4b4[Te6edf3keyTb4b4b4]Tb4b4b4) Tb4b4b4{
Te6edf3targetTb4b4b4.Te6edf3custom_image Tff7b72= Te6edf3mapTb4b4b4[Te6edf3keyTb4b4b4]Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4;
Te6edf3applyImageTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4)Tb4b4b4;
Te6edf3applyImageTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3lastCallTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tffa657ArrayTb4b4b4.Te6edf3isArrayTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3callHistoryTb4b4b4) Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3callHistoryTb4b4b4.Te6edf3length Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3callHistory Tff7b72= Tff7b72thisTb4b4b4.Te6edf3callHistoryTb4b4b4.Te6edf3mapTb4b4b4(Tb4b4b4(Te6edf3entryTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3key Tff7b72=
Te6edf3entryTb4b4b4.Te6edf3remote_identity_hash Tff7b72|| Te6edf3entryTb4b4b4.Te6edf3remote_destination_hash Tff7b72|| Te6edf3entryTb4b4b4.Te6edf3remote_telephony_hashTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3key Tff7b72&& Te6edf3mapTb4b4b4[Te6edf3keyTb4b4b4]Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{ Tb4b4b4...Te6edf3entryTb4b4b4, Te6edf3contact_imageTff7b72: Te6edf3mapTb4b4b4[Te6edf3keyTb4b4b4] Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3entryTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3openAddContactModalTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3editingContact Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3contactForm Tff7b72= Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3remote_identity_hashTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3lxmf_addressTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3lxst_addressTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3preferred_ringtone_idTff7b72: Tff7b72nullTb4b4b4,
Te6edf3custom_imageTff7b72: Tff7b72nullTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isContactModalOpen Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3openEditContactModalTb4b4b4(Te6edf3contactTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3editingContact Tff7b72= Te6edf3contactTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3contactForm Tff7b72= Tb4b4b4{
Te6edf3idTff7b72: Te6edf3contactTb4b4b4.Te6edf3idTb4b4b4,
Te6edf3nameTff7b72: Te6edf3contactTb4b4b4.Te6edf3nameTb4b4b4,
Te6edf3remote_identity_hashTff7b72: Te6edf3contactTb4b4b4.Te6edf3remote_identity_hashTb4b4b4,
Te6edf3lxmf_addressTff7b72: Te6edf3contactTb4b4b4.Te6edf3lxmf_address Tff7b72|| Ta5d6ff""Tb4b4b4,
Te6edf3lxst_addressTff7b72: Te6edf3contactTb4b4b4.Te6edf3lxst_address Tff7b72|| Ta5d6ff""Tb4b4b4,
Te6edf3preferred_ringtone_idTff7b72: Te6edf3contactTb4b4b4.Te6edf3preferred_ringtone_idTb4b4b4,
Te6edf3custom_imageTff7b72: Te6edf3contactTb4b4b4.Te6edf3custom_imageTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isContactModalOpen Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3saveContactTb4b4b4(Te6edf3contactTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3contactTb4b4b4.Te6edf3name Tff7b72|| Tff7b72!Te6edf3contactTb4b4b4.Te6edf3remote_identity_hashTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.name_and_hash_required"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3contactTb4b4b4.Te6edf3idTb4b4b4) Tb4b4b4{
T8b949e// if editing and image was cleared, let backend know
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3editingContact Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3editingContactTb4b4b4.Te6edf3custom_image Tff7b72&& Tff7b72!Te6edf3contactTb4b4b4.Te6edf3custom_imageTb4b4b4) Tb4b4b4{
Te6edf3contactTb4b4b4.Te6edf3clear_image Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3patchTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/contacts/Tffd700${Te6edf3contactTb4b4b4.Te6edf3idTffd700}Ta5d6ff`Tb4b4b4, Te6edf3contactTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.contact_updated"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/telephone/contacts"Tb4b4b4, Te6edf3contactTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.contact_added"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3isContactModalOpen Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getContactsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"Failed to save contact"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3deleteContactTb4b4b4(Te6edf3contactIdTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3confirmTb4b4b4(Ta5d6ff"Are you sure you want to delete this contact?"Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/contacts/Tffd700${Te6edf3contactIdTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.contact_deleted"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getContactsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_delete_contact"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3onContactImageChangeTb4b4b4(Te6edf3eventTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3file Tff7b72= Te6edf3eventTb4b4b4.Te6edf3targetTb4b4b4.Te6edf3filesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3fileTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72new Te6edf3CompressorTb4b4b4(Te6edf3fileTb4b4b4, Tb4b4b4{
Te6edf3maxWidthTff7b72: T79c0ff256Tb4b4b4,
Te6edf3maxHeightTff7b72: T79c0ff256Tb4b4b4,
Te6edf3qualityTff7b72: T79c0ff0.7Tb4b4b4,
Te6edf3mimeTypeTff7b72: Ta5d6ff"image/webp"Tb4b4b4,
Te6edf3successTff7b72: Tb4b4b4(Te6edf3resultTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3reader Tff7b72= Tff7b72new Te6edf3FileReaderTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3readerTb4b4b4.Te6edf3onload Tff7b72= Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3contactFormTb4b4b4.Te6edf3custom_image Tff7b72= Te6edf3eTb4b4b4.Te6edf3targetTb4b4b4.Te6edf3resultTb4b4b4;
Tb4b4b4}Tb4b4b4;
Te6edf3readerTb4b4b4.Te6edf3readAsDataURLTb4b4b4(Te6edf3resultTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3errorTff7b72: Tb4b4b4(Te6edf3errTb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3errTb4b4b4.Te6edf3messageTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3eventTb4b4b4.Te6edf3targetTb4b4b4.Te6edf3value Tff7b72= Ta5d6ff""Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3copyHashTb4b4b4(Te6edf3hashTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Te6edf3navigatorTb4b4b4.Te6edf3clipboardTb4b4b4.Te6edf3writeTextTb4b4b4(Te6edf3hashTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.hash_copied"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_copy_hash"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3generateGreetingTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isGeneratingGreeting Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemail/generate-greeting"Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.greeting_generated_successfully"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getVoicemailStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"Failed to generate greeting"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isGeneratingGreeting Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3uploadGreetingTb4b4b4(Te6edf3eventTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3file Tff7b72= Te6edf3eventTb4b4b4.Te6edf3targetTb4b4b4.Te6edf3filesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3fileTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isUploadingGreeting Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72const Te6edf3formData Tff7b72= Tff7b72new Te6edf3FormDataTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3formDataTb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff"file"Tb4b4b4, Te6edf3fileTb4b4b4)Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemail/greeting/upload"Tb4b4b4, Te6edf3formDataTb4b4b4, Tb4b4b4{
Te6edf3headersTff7b72: Tb4b4b4{
Ta5d6ff"Content-Type"Tff7b72: Ta5d6ff"multipart/form-data"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.greeting_uploaded_successfully"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getVoicemailStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"Failed to upload greeting"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isUploadingGreeting Tff7b72= Tff7b72falseTb4b4b4;
Te6edf3eventTb4b4b4.Te6edf3targetTb4b4b4.Te6edf3value Tff7b72= Ta5d6ff""Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3deleteGreetingTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3confirmTb4b4b4(Ta5d6ff"Are you sure you want to delete your custom greeting?"Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemail/greeting"Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.greeting_deleted"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getVoicemailStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_delete_greeting"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3startRecordingGreetingMicTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemail/greeting/record/start"Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getVoicemailStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_start_recording_greeting"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3stopRecordingGreetingMicTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemail/greeting/record/stop"Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getVoicemailStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.greeting_recorded_from_mic"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_stop_recording_greeting"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3playVoicemailTb4b4b4(Te6edf3voicemailTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3playingVoicemailId Tff7b72=== Te6edf3voicemailTb4b4b4.Te6edf3idTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3playingVoicemailId Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3playingVoicemailId Tff7b72= Te6edf3voicemailTb4b4b4.Te6edf3idTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayer Tff7b72= Tff7b72new Te6edf3AudioTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/voicemails/Tffd700${Te6edf3voicemailTb4b4b4.Te6edf3idTffd700}Ta5d6ff/audioTa5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3addEventListenerTb4b4b4(Ta5d6ff"error"Tb4b4b4, Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Audio player error:"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_play_voicemail"Tb4b4b4) Tff7b72|| Ta5d6ff"Failed to load voicemail audio"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3playingVoicemailId Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayer Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3onended Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3playingVoicemailId Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3playTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Audio play failed:"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3playingVoicemailId Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3markVoicemailAsReadTb4b4b4(Te6edf3voicemailTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3markVoicemailAsReadTb4b4b4(Te6edf3voicemailTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3voicemailTb4b4b4.Te6edf3is_readTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/voicemails/Tffd700${Te6edf3voicemailTb4b4b4.Te6edf3idTffd700}Ta5d6ff/readTa5d6ff`Tb4b4b4)Tb4b4b4;
Te6edf3voicemailTb4b4b4.Te6edf3is_read Tff7b72= T79c0ff1Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3unreadVoicemailsCount Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff0Tb4b4b4, Tff7b72thisTb4b4b4.Te6edf3unreadVoicemailsCount Tff7b72- T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3playLatestVoicemailTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3voicemailsTb4b4b4.Te6edf3length Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3playVoicemailTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3voicemailsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3deleteVoicemailTb4b4b4(Te6edf3voicemailIdTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/voicemails/Tffd700${Te6edf3voicemailIdTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getVoicemailsTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.voicemail_deleted"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_delete_voicemail"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getRecordingsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/recordings"Tb4b4b4, Tb4b4b4{
Te6edf3paramsTff7b72: Tb4b4b4{ Te6edf3searchTff7b72: Tff7b72thisTb4b4b4.Te6edf3recordingSearch Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3recordings Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3recordings Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to get recordings:"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3onRecordingSearchInputTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4) Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeoutTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3searchDebounceTimeout Tff7b72= Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getRecordingsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff500Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3playRecordingTb4b4b4(Te6edf3recordingTb4b4b4, Te6edf3sideTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3playingRecordingId Tff7b72=== Te6edf3recordingTb4b4b4.Te6edf3id Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3playingSide Tff7b72=== Te6edf3sideTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3playingRecordingId Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3playingSide Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3playingRecordingId Tff7b72= Te6edf3recordingTb4b4b4.Te6edf3idTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3playingSide Tff7b72= Te6edf3sideTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayer Tff7b72= Tff7b72new Te6edf3AudioTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/recordings/Tffd700${Te6edf3recordingTb4b4b4.Te6edf3idTffd700}Ta5d6ff/audio/Tffd700${Te6edf3sideTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3onended Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3playingRecordingId Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3playingSide Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayer Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3playTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to play recording:"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_load_recording"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3playingRecordingId Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3playingSide Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3deleteRecordingTb4b4b4(Te6edf3recordingIdTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3confirmTb4b4b4(Ta5d6ff"Are you sure you want to delete this recording?"Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/recordings/Tffd700${Te6edf3recordingIdTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getRecordingsTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.recording_deleted"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_delete_recording"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3playGreetingTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3isPlayingGreetingTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isPlayingGreeting Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3pauseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3isPlayingGreeting Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayer Tff7b72= Tff7b72new Te6edf3AudioTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemail/greeting/audio"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3playTb4b4b4(Tb4b4b4)Tb4b4b4.Tff7b72catchTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.no_greeting_audio_found"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isPlayingGreeting Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioPlayerTb4b4b4.Te6edf3onended Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isPlayingGreeting Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3callTb4b4b4(Te6edf3identityHashTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3identityHashTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.enter_identity_hash_to_call_error"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72let Te6edf3hashToCall Tff7b72= Te6edf3identityHashTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e// Accept lxmf:// URIs or pasted text; extract first 64-char hex
Tff7b72const Te6edf3hexMatch Tff7b72= Te6edf3hashToCallTb4b4b4.Te6edf3matchTb4b4b4(Ta5d6ff/[0-9a-fA-F]{64}/Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3hexMatchTb4b4b4) Tb4b4b4{
Te6edf3hashToCall Tff7b72= Te6edf3hexMatchTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4;
Tb4b4b4}
Te6edf3hashToCall Tff7b72= Te6edf3hashToCallTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e// Try to resolve name from contacts
Tff7b72const Te6edf3contact Tff7b72= Tff7b72thisTb4b4b4.Te6edf3contactsTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3cTb4b4b4) Tb4b4b4=> Te6edf3cTb4b4b4.Te6edf3nameTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4) Tff7b72=== Te6edf3hashToCallTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3contactTb4b4b4) Tb4b4b4{
Te6edf3hashToCall Tff7b72= Te6edf3contactTb4b4b4.Te6edf3remote_identity_hashTb4b4b4;
Tb4b4b4}
T8b949e// Provide immediate feedback
Tff7b72thisTb4b4b4.Te6edf3destinationHash Tff7b72= Te6edf3hashToCallTb4b4b4;
Tff7b72const Te6edf3targetContact Tff7b72= Tff7b72thisTb4b4b4.Te6edf3contactsTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3cTb4b4b4) Tb4b4b4=> Te6edf3cTb4b4b4.Te6edf3remote_identity_hash Tff7b72=== Te6edf3hashToCallTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3initiationTargetHash Tff7b72= Te6edf3hashToCallTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3initiationTargetName Tff7b72= Te6edf3targetContact Tff7b72? Te6edf3targetContactTb4b4b4.Te6edf3name Tff7b72: Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3activeTab Tff7b72= Ta5d6ff"phone"Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3initiationStatus Tff7b72= Ta5d6ff"Initiating..."Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isCallEnded Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3wasDeclined Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/call/Tffd700${Te6edf3hashToCallTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3initiationStatus Tff7b72= Tff7b72nullTb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"Failed to initiate call"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3handleCallInputUpTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3newCallSuggestionsTb4b4b4.Te6edf3length Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3selectedSuggestionIndex Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3selectedSuggestionIndexTff7b72--Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3selectedSuggestionIndex Tff7b72= Tff7b72thisTb4b4b4.Te6edf3newCallSuggestionsTb4b4b4.Te6edf3length Tff7b72- T79c0ff1Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3handleCallInputDownTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3newCallSuggestionsTb4b4b4.Te6edf3length Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3selectedSuggestionIndex Tff7b72< Tff7b72thisTb4b4b4.Te6edf3newCallSuggestionsTb4b4b4.Te6edf3length Tff7b72- T79c0ff1Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3selectedSuggestionIndexTff7b72++Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3selectedSuggestionIndex Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3handleCallInputEnterTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3selectedSuggestionIndex Tff7b72>= T79c0ff0 Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3selectedSuggestionIndex Tff7b72< Tff7b72thisTb4b4b4.Te6edf3newCallSuggestionsTb4b4b4.Te6edf3lengthTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3suggestion Tff7b72= Tff7b72thisTb4b4b4.Te6edf3newCallSuggestionsTb4b4b4[Tff7b72thisTb4b4b4.Te6edf3selectedSuggestionIndexTb4b4b4]Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3selectSuggestionTb4b4b4(Te6edf3suggestionTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3callTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3destinationHashTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3selectSuggestionTb4b4b4(Te6edf3suggestionTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3destinationHash Tff7b72= Te6edf3suggestionTb4b4b4.Te6edf3hashTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isCallInputFocused Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3selectedSuggestionIndex Tff7b72= Tff7b72-T79c0ff1Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3callTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3destinationHashTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3onCallInputBlurTb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e// Delay blur to allow mousedown on suggestions
Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isCallInputFocused Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3selectedSuggestionIndex Tff7b72= Tff7b72-T79c0ff1Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff200Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3answerCallTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/answer"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_answer_call"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3hangupCallTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3activeCall Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4.Te6edf3is_incoming Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4.Te6edf3status Tff7b72=== T79c0ff4Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3wasDeclined Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/hangup"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_hangup_call"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3sendToVoicemailTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/telephone/send-to-voicemail"Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.call_sent_to_voicemail"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_send_to_voicemail"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3switchAudioProfileTb4b4b4(Te6edf3audioProfileIdTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/telephone/switch-audio-profile/Tffd700${Te6edf3audioProfileIdTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_switch_audio_profile"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3toggleMicrophoneTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3isCurrentlyMuted Tff7b72= Tff7b72thisTb4b4b4.Te6edf3localMicMutedTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isMicMuting Tff7b72= Tff7b72trueTb4b4b4;
T8b949e// Optimistic update
Tff7b72thisTb4b4b4.Te6edf3localMicMuted Tff7b72= Tff7b72!Te6edf3isCurrentlyMutedTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4.Te6edf3is_mic_muted Tff7b72= Tff7b72thisTb4b4b4.Te6edf3localMicMutedTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3endpoint Tff7b72= Te6edf3isCurrentlyMuted
Tff7b72? Ta5d6ff"/api/v1/telephone/unmute-transmit"
Tff7b72: Ta5d6ff"/api/v1/telephone/mute-transmit"Tb4b4b4;
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4(Te6edf3endpointTb4b4b4)Tb4b4b4;
Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isMicMuting Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff500Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// Revert on error
Tff7b72thisTb4b4b4.Te6edf3localMicMuted Tff7b72= Tff7b72!Tff7b72thisTb4b4b4.Te6edf3localMicMutedTb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_toggle_microphone"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isMicMuting Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3toggleSpeakerTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3isCurrentlyMuted Tff7b72= Tff7b72thisTb4b4b4.Te6edf3localSpeakerMutedTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isSpeakerMuting Tff7b72= Tff7b72trueTb4b4b4;
T8b949e// Optimistic update
Tff7b72thisTb4b4b4.Te6edf3localSpeakerMuted Tff7b72= Tff7b72!Te6edf3isCurrentlyMutedTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3activeCallTb4b4b4.Te6edf3is_speaker_muted Tff7b72= Tff7b72thisTb4b4b4.Te6edf3localSpeakerMutedTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3endpoint Tff7b72= Te6edf3isCurrentlyMuted
Tff7b72? Ta5d6ff"/api/v1/telephone/unmute-receive"
Tff7b72: Ta5d6ff"/api/v1/telephone/mute-receive"Tb4b4b4;
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4(Te6edf3endpointTb4b4b4)Tb4b4b4;
Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isSpeakerMuting Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff500Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// Revert on error
Tff7b72thisTb4b4b4.Te6edf3localSpeakerMuted Tff7b72= Tff7b72!Tff7b72thisTb4b4b4.Te6edf3localSpeakerMutedTb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"call.failed_to_toggle_speaker"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isSpeakerMuting Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────